为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2023-04-13 16:50:55
使用的代码: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":"black "}}
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

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

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

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

  1. 遍历 JSON 对象中的键。在你的情况下,这些是 - “06:30:00”,“06:45:00”。您可以在 google 上搜索解决方案来遍历 java 中的 JSON 对象中的键。

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

  3. 从 json 对象获取“颜色”字段 - 您可以使用 Json 库为此提供的 optString() 或 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 对象。


希望这可以帮助。


查看完整回答
反对 回复 2023-04-13
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

使用Keys()返回的方法Iterator<String>,以便很容易迭代每个嵌套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));

}


查看完整回答
反对 回复 2023-04-13
  • 2 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信