我将转换字符串转换为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是&#34; {}&#34;,则四次。所以它是正确的,因为数组有4个元素,但为什么它是空对象?我正在使用org.json。
由于
答案 0 :(得分:5)
array.getJSONObject(i)
已经返回了一个JSONObject
类型的对象,你不需要将它传递给JSONObject
类的构造函数。
简单地写
...
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
System.out.println("OBJ: " + obj);
}
...
答案 1 :(得分:4)
您正在调用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"}