[英]Convert string to json doesn't work java
我在将字符串转换为 json 时遇到问题。也就是说,我的 json 字符串是:
{"serverId":2,"deviceId":736,"analysisDate":"2017-05-11T07:20:27.713Z","eventType":"Logs","eventAttributes":[{"name":"level","value":"INFO"},{"name":"type","value":"Video Blocked On"},{"name":"cameraId","value":"722"},{"name":"userId","value":"1"}]}
我的代码:
try {
JSONObject object = new JSONObject(jsonString);
JSONArray array = object.getJSONArray("eventAttributes");
System.out.println("ARRAY: " + array);
for (int i = 0; i < array.length(); i++) {
JSONObject obj = new JSONObject(array.getJSONObject(i));
System.out.println("OBJ: " + obj);
}
} catch (JSONException ex) {
Exceptions.printStackTrace(ex);
}
System.out.println 数组是:
[{"name":"level","value":"INFO"},{"name":"type","value":"Video Blocked On"},{"name":"cameraId","value":"722"},{"name":"userId","value":"1"}]
但如果我打印 obj is "{}",四次。 所以它是正确的,因为数组有 4 个元素,但为什么它是空的 object? 我正在使用 org.json。
谢谢
array.getJSONObject(i)
已经返回了一个JSONObject
类型的对象,你不需要将它传递给JSONObject
类的构造函数。
简单地写
...
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
System.out.println("OBJ: " + obj);
}
...
您正在调用JSONObject(Object)
构造函数,传入JSONObject
(数组中的元素)。 该构造函数记录为:
使用bean getter从Object构造一个JSONObject。 它反映了对象的所有公共方法。 对于没有参数且名称以
"get"
或"is"
开头,后跟大写字母的每个方法,将调用该方法,并将一个键和从getter方法返回的值放入新的JSONObject中。 [...]
现在JSONObject
本身没有任何适合bean getter的东西,所以你最终没有键。 您不希望将JSONObject
视为bean。
这就是您当前代码不起作用的原因。 要修复它,只是不要调用构造函数 - 而是使用数组元素已经是JSONObject
的事实:
JSONObject obj = array.getJSONObject(i);
具有该变化的输出:
OBJ: {"name":"level","value":"INFO"}
OBJ: {"name":"type","value":"Video Blocked On"}
OBJ: {"name":"cameraId","value":"722"}
OBJ: {"name":"userId","value":"1"}
如果您考虑以下示例,您可以通过 3 种方式进行:
jsonString = {
"name" : "John",
"sport" : "Soccer",
"age" : 25,
"id" : 100,
"score" : [ 2, 1, 4, 5, 0, 1, 2, 3, 1]
}
字符串到 JSON Object 使用 GSON
Gson g = new Gson();
Player p = g.fromJson(jsonString, Player.class)
您还可以使用方法toJson()将 Java object 转换为 JSON
String str = g.toJson(p);
JSON 字符串到 Java object 使用 JSON-Simple
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
字符串为 JSON - Jackson 示例
Player john = new ObjectMapper().readValue(jsonString, Player.class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.