【问题标题】:Java get nested JSON object/arrayJava 获取嵌套的 JSON 对象/数组
【发布时间】:2019-12-01 15:43:21
【问题描述】:

使用的代码:

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

这是 JArray 的样子:

[{"06:30:00":{"color":"grey","time_color":"black"},"06:45:00":{"color":"grey","time_color ":"黑色"}}]

现在我想循环接收到的时间并打印它们的颜色,怎么做?

我尝试过的:

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":"grey","time_color":"black"},"06:45:00":{"color":"grey","time_color" :"黑色"}}

【问题讨论】:

    标签: java android arrays json dictionary


    【解决方案1】:

    您将获得此输出,因为您的 JSON 数组仅包含一个 JSON 对象,即 - {"06:30:00":{"color":"grey","time_color":"black"},"06: 45:00":{"color":"grey","time_color":"black"}}

    在回答您的问题之前,我建议您先了解一下 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 对象。

    希望这会有所帮助。

    谢谢。

    【讨论】:

      【解决方案2】:

      使用返回Iterator&lt;String&gt;的Keys()方法,这样就可以很容易地迭代每个嵌套的JSON

      for (int i = 0; i < JArray.length(); ++i) {
      try {
         JSONObject rec = JArray.getJSONObject(i);
      
         Iterator<String> keys = rec.keys();
          while(keys.hasNext()) {
            String key1 = keys.next();
            JSONObject nested = rec.getJSONObject(key1);   //{"color":"grey","time_color":"black"}
      
            //now again same procedure
               Iterator<String> nestedKeys = nested.keys();
                 while(nestedKeys.hasNext())  {
                     String key2 = nestedKeys.next();
                    System.out.println("key"+"..."+key2+"..."+"value"+"..."+nested.getString(key2);
                   }
            }
      
      } catch (JSONException e) {
          e.printStackTrace();
         }
      android.util.Log.e("print row:", String.valueOf(rec));
      }
      

      【讨论】:

      • 我正在向您展示如何从嵌套的JSON 中获取值,您可以弄清楚如何使用它们或在哪里使用它们
      • 这是完美的答案,迭代器是最佳选择
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多