Java获取嵌套的JSON对象/数组

时间:2019-07-23 14:48:10

标签: java android arrays json dictionary

使用的代码:

jObj = new JSONObject(json);
newJSONString = jObj.getString("payload");
JArray = new JSONArray(newJSONString);

这是JArray的样子:

  

[{“” 06:30:00“:{” color“:”灰色“,” time_color“:”黑色“},” 06:45:00“:{” color“:”灰色“,” time_color “:” black“}}]

现在我想遍历接收到的时间并打印其颜色,该怎么做?

我尝试过的事情:

for (int i = 0; i < JArray.length(); ++i) {
    JSONObject rec = null;
    try {
        rec = JArray.getJSONObject(i);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    android.util.Log.e("print row:", String.valueOf(rec));
}

这只是给我这个输出:

  

{“ 06:30:00”:{“ color”:“灰色”,“ time_color”:“黑色”},“ 06:45:00”:{“ color”:“灰色”,“ time_color” :“黑色”}}

2 个答案:

答案 0 :(得分:1)

您将得到此输出,因为您的JSON数组仅包含一个JSON对象,该对象是-{“ 06:30:00”:{“ color”:“ grey”,“ time_color”:“ black”},“ 06: 45:00“:{” color“:”灰色“,” time_color“:”黑色“}}

在回答您的问题之前,我建议您使用JSON语法。它将帮助您有效地理解问题和答案。

回到您的问题,以便从嵌套的JSON中获取“颜色”字段:

  1. 遍历JSON对象中的键。您的情况是- “ 06:30:00”,“ 06:45:00”。您可以用谷歌搜索解决方案 通过Java中JSON对象中的键。

  2. 获取与给定键(时间)关联的嵌套对象-您可以使用 Json库为此提供的getJSONObject()方法。

  3. 从json对象获取“颜色”字段-您可以使用optString()或 Json库为此提供的getString()方法取决于

这里是您遇到问题的Java解决方案:

public static void getColor(JSONObject payloadObject) {
    try {
        JSONArray keys = payloadObject.names();
        for (int i = 0; i < keys.length(); i++) {
            String key = keys.getString(i); // Here's your key
            JSONObject value = payloadObject.getJSONObject(key); // Here's your value - nested JSON object
            String color = value.getString("color");
            System.out.println(color);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }
}

请注意,您认为作为有效负载收到的对​​象是JSON对象。

希望这会有所帮助。

谢谢。

答案 1 :(得分:0)

使用返回Keys()的{​​{1}}方法,以便迭代每个嵌套的Iterator<String>

JSON