仅使用org.JSON解析JSON

时间:2016-08-23 23:28:18

标签: java json

我一直在努力完成一些我认为org.json很简单的事情。我收到一些看起来像这样的JSON:

{
    "startDate": "2016-08-22T19:07:20.000Z",
    "endDate": "2016-08-23T19:07:20.000Z",
    "products": [{
        "name": "<Device Level Product>",
        "deviceIdSensorIdArr": [{
            "deviceId": 13124,
            "sensorId": null
        }],
        "dataProductId": 1,
        "dataProductFormatId": 2,
        "searchTypeId": 5,
        "searchNodeId": 115,
        "siteDeviceId": null,
        "resourceTypeId": 1500,
        "resourceId": 183,
        "parameter": {
            "35": "1",
            "38": "1",
            "40": ["41", "0"]
        }
    }, {
        "name": "Air Temperature",
        "deviceIdSensorIdArr": [{
            "deviceId": 13124,
            "sensorId": 9044
        }],
        "dataProductId": 1,
        "dataProductFormatId": 2,
        "searchTypeId": 5,
        "searchNodeId": 115,
        "siteDeviceId": null,
        "resourceTypeId": 1501,
        "resourceId": 5235,
        "parameter": {
            "35": "1",
            "38": "1",
            "40": ["41", "0"]
        }
    }]
}

我需要得到" deviceId" "产品中每个对象的价值"阵列。检索对象中的条目,例如" name"或" searchNodeId"很容易,但我很难获得" deviceId"因为它是第二层。下面的代码是我到目前为止的代码。我可以很容易地获得第一层值,例如name而不是deviceId。我确信其他库有一种更简单的方法,但我只允许使用org.JSON并且是第一次使用它。

        values = wp.getFormParameters("parameters");
        JSONObject obj = new JSONObject(values);
        JSONArray products = obj.getJSONArray("products");
        for(int i = 0; i < products.length(); ++i){
            String name = products.getJSONObject(i).getString("name");
            JSONObject deviceIdStr = products.getJSONObject(i).getJSONObject("deviceIdSensorIdArr");
            String deviceId = deviceIdStr.getString("deviceId");
        }

修改

为了克服问题的重点,我无法弄清楚如何使用org.JSON函数进入JSON字符串的第二层。我可以自己编写一个解析deviceId的方法,但必须有一种方法可以用org.JSON来解决这个问题,而我还没有想到。

1 个答案:

答案 0 :(得分:2)

试试这个 -

JSONObject obj = new JSONObject(content);
    JSONArray products = obj.getJSONArray("products");
    for(int i = 0; i < products.length(); ++i){
        String name = products.getJSONObject(i).getString("name");
        JSONArray array = products.getJSONObject(i).getJSONArray("deviceIdSensorIdArr");
        for (int j = 0; j < array.length(); j++) {
            String string = array.getJSONObject(j).getString("deviceId");
            System.out.println(string);
        }
    }

输出

13124

13124