这个问题在这里已经有答案了:
如何在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[]
无法检索值,但无法检索。
有没有其他方法可以从上面的字符串中获取每个元素的值?
2条答案
按热度按时间t5fffqht1#
你可以用
org.json.JSONObject
(https://mvnrepository.com/artifact/org.json/json)类以访问键值功能。创造
JSONObject
只是过去JSON
值作为其构造函数的字符串:现在您可以通过给定的键轻松访问值:
您可以在本教程中了解更多关于不同json解析方法的信息:如何在java中解析json
wz3gfoph2#
包含json的字符串就是一个字符串。它不会神奇地被解析成其他任何东西。不分成行,不解释为json,什么都没有。java不知道它的内容,也不知道它对你有什么意义。
因此,为了能够处理json,您必须编写代码,将json标记化并解析为对象,这些对象提供访问其键和值所需的函数。
有多个库提供这些功能。其中最有能力和最知名的是Jackson和格森,但他们可能是一个过度的任务,像你这么简单。像jsonobject这样简单的库可能就足够了。
主要区别在于:json序列化/反序列化库(如jackson或gson)将已知的json解析为用户定义的对象。如果json中的字段和java对象中的字段不匹配,它将无法工作。但是如果他们这样做了,您就可以对所有键进行类型安全访问,并且可以像任何常规java对象一样使用您的对象。像jsonobject这样的库的工作原理不同:它们不需要知道任何关于json对象的信息,它们将它解析为 Package 器对象,然后您可以查询数据。它们可以处理任何有效的json输入,但是如果您假设存在哪些键以及它们的类型,并且这些假设不成立,那么在访问它们时可能会出错。所以,这里没有类型安全。
下面的代码不考虑任何库引发的潜在异常,NOE也不包括任何空检查。
Jackson:
格森
JSO对象: