java—从字符串数组对象检索每个键值

wvt8vs2t  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(220)

这个问题在这里已经有答案了

如何在java中解析json(34个答案)
三小时前关门了。
我有一个以下格式的字符串,并希望从中访问某些元素,如主机/用户名。

{
 "username":"admin",
 "password":"admin1234",
 "engine":"mysql",
 "host":"toolsdata.us-east-1.rds.amazonaws.com",
 "port":3306,
 "dbname":"tools_data",
 "dbInstanceIdentifier":"toolsdata
}

我试过用 List<String> 或者 String[] 无法检索值,但无法检索。
有没有其他方法可以从上面的字符串中获取每个元素的值?

t5fffqht

t5fffqht1#

你可以用 org.json.JSONObject (https://mvnrepository.com/artifact/org.json/json)类以访问键值功能。
创造 JSONObject 只是过去 JSON 值作为其构造函数的字符串:

String jsonAsString = "Your JSON as string...";
JSONObject json = new JSONObject(jsonAsString);

现在您可以通过给定的键轻松访问值:

json.getString("username");
json.getInt("port");

您可以在本教程中了解更多关于不同json解析方法的信息:如何在java中解析json

wz3gfoph

wz3gfoph2#

包含json的字符串就是一个字符串。它不会神奇地被解析成其他任何东西。不分成行,不解释为json,什么都没有。java不知道它的内容,也不知道它对你有什么意义。
因此,为了能够处理json,您必须编写代码,将json标记化并解析为对象,这些对象提供访问其键和值所需的函数。
有多个库提供这些功能。其中最有能力和最知名的是Jackson和格森,但他们可能是一个过度的任务,像你这么简单。像jsonobject这样简单的库可能就足够了。
主要区别在于:json序列化/反序列化库(如jackson或gson)将已知的json解析为用户定义的对象。如果json中的字段和java对象中的字段不匹配,它将无法工作。但是如果他们这样做了,您就可以对所有键进行类型安全访问,并且可以像任何常规java对象一样使用您的对象。像jsonobject这样的库的工作原理不同:它们不需要知道任何关于json对象的信息,它们将它解析为 Package 器对象,然后您可以查询数据。它们可以处理任何有效的json输入,但是如果您假设存在哪些键以及它们的类型,并且这些假设不成立,那么在访问它们时可能会出错。所以,这里没有类型安全。
下面的代码不考虑任何库引发的潜在异常,NOE也不包括任何空检查。
Jackson:

class Settings {
    String username;
    String password;
    String engine;
    String host;
    Integer port;
    String dbname;
    String dbInstanceIdentifier;

    public static Settings fromJson (String jsonData) {
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.readValue(jsonData, Settings.class);
    }
}

格森

class Settings {
    String username;
    String password;
    String engine;
    String host;
    Integer port;
    String dbname;
    String dbInstanceIdentifier;

    public static Settings fromJson (String jsonData) {
        Gson gson = new Gson();
        return gson.fromJson(jsonData, Settings.class);
    }
}

JSO对象:

class Settings {
    String username;
    String password;
    String engine;
    String host;
    Integer port;
    String dbname;
    String dbInstanceIdentifier;

    public static Settings fromJson (String jsonData) {
        JSONObject json = new JSONObject(jsonData);
        Settings newSettings = new Settings();
        newSettings.username = json.getString("username");
        newSettings.password = json.getString("password");
        newSettings.engine = json.getString("engine");
        newSettings.host = json.getString("host");
        newSettings.port = json.getInt("port");
        newSettings.dbname = json.getString("dbname");
        newSettings.dbInstanceIdentifier = json.getString("dbInstanceIdentifier");
        return newSettings;
    }
}

相关问题