将字符串转换为json并不适用于java

时间:2017-05-11 05:49:22

标签: java json string parsing

我将转换字符串转换为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。

由于

2 个答案:

答案 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"}