我一直在努力完成一些我认为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"]
}
}]
}
我需要得到&#34; deviceId&#34; &#34;产品中每个对象的价值&#34;阵列。检索对象中的条目,例如&#34; name&#34;或&#34; searchNodeId&#34;很容易,但我很难获得&#34; deviceId&#34;因为它是第二层。下面的代码是我到目前为止的代码。我可以很容易地获得第一层值,例如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来解决这个问题,而我还没有想到。
答案 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