【问题标题】:How to get JSON array inside JSON array?如何在 JSON 数组中获取 JSON 数组?
【发布时间】:2015-09-17 14:05:36
【问题描述】:

我收到来自 url(server) 消息的 JSON 响应。

{
  "response": [
    79457,
    {
      "mid": 321,
      "date": 123,
      "out": 1,
      "uid": 984,
      "read_state": 1,
      "title": " ... ",
      "body": "message",
      "fwd_messages": [
        {
          "uid": 981,
          "date": 152,
          "body": "forwarded messages 1",
          "fwd_messages": [
            {
              "uid": 654,
              "date": 156,
              "body": "1"
            },
            {
              "uid": 174,
              "date": 158,
              "body": "2"
            }
          ]
        },
        {
          "uid": 949,
          "date": 651,
          "body": "forwarded messages 2",
          "fwd_messages": [
            {
              "uid": 694,
              "date": 320,
              "body": "32",
              "fwd_messages": [
                {
                  "uid": 152,
                  "date": 111,
                  "body": "1",
                  "fwd_messages": [
                    {
                      "uid": 151,
                      "date": 112,
                      "body": "8"
                    }
                  ]
                },
                {
                  "uid": 542,
                  "date": 315,
                  "body": "2",
                  "fwd_messages": [
                    {
                      "uid": 129,
                      "date": 514,
                      "body": "1",
                      "fwd_messages": [
                        {
                          "uid": 635,
                          "date": 225,
                          "body": "8"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "uid": 123,
              "date": 650,
              "body": "",
              "fwd_messages": [
                {
                  "uid": 154,
                  "date": 122,
                  "body": "1"
                },
                {
                  "uid": 547,
                  "date": 510,
                  "body": "2"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

一些消息可以在数组“fwd_messages”中转发消息,并且转发的消息可以在另一个转发的消息中,如下所示:

          "uid": 949,
          "date": 651,
          "body": "forwarded messages 2",
          "fwd_messages": [
            {
              "uid": 694,
              "date": 320,
              "body": "32",
              "fwd_messages": [
                {
                  "uid": 152,
                  "date": 111,
                  "body": "1",
                  "fwd_messages": [
                    {
                      "uid": 151,
                      "date": 112,
                      "body": "8"
                    }
                  ]
                },
                {
                  "uid": 542,
                  "date": 315,
                  "body": "2",
                  "fwd_messages": [
                    {
                      "uid": 129,
                      "date": 514,
                      "body": "1",
                      "fwd_messages": [
                        {
                          "uid": 635,
                          "date": 225,
                          "body": "8"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "uid": 123,
              "date": 650,
              "body": "",
              "fwd_messages": [
                {
                  "uid": 154,
                  "date": 122,
                  "body": "1"
                },
                {
                  "uid": 547,
                  "date": 510,
                  "body": "2"
                }
              ]
            }
          ]
        }

我有一个简单的消息类,叫做 Message

public class Message
{
    public int user_id;
    public int date;
    public String body;
    public List<FwdMessages> fwdMessages;

    public Message (int user_id, int date, String body, List<FwdMessages> fwdMessages) {
        this.user_id = user_id;
        this.date = date;
        this.body = body;
        this.fwdMessages = fwdMessages;
    }
}

转发消息类

public class FwdMessages {
    public int user_id;
    public int date;
    public String body;
    public List<FwdMessages> fwdMessages;

}

那么我怎样才能在另一个转发的消息中获取这些转发的消息并将它们放入列表中?并且应该注意,一个 fwd 消息对象来自另一个。对不起我的英语:)

【问题讨论】:

    标签: java android arrays json chat


    【解决方案1】:

    这可能会对你有所帮助我没有在编辑器上测试这段代码,但你可以从这段代码中了解它是如何工作的。

    JSONObject mainObj = new JSONOBject(myString);
    if(mainObj != null){
        JSONArray list = mainObj.getJSONArray("prodCat_list");
        if(list != null){
            for(int i = 0; i < list.length();i++){
                JSONObject elem = list.getJSONObject(i);
                if(elem != null){
                    JSONArray prods = elem.getJSONArray("prods");
                    if(prods != null){
                        for(int j = 0; j < prods.length();j++){
                            JSONObject innerElem = prods.getJSONObject(j);
                            if(innerElem != null){
                                int cat_id = innerELem.getInt("cat_id");
                                int pos = innerElem.getInt("position");
                                String sku = innerElem.getString("sku");
                            }
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 数组的大小无关紧要? “fwd_messages”数组可以包含 1 或 5 个转发的消息。
    【解决方案2】:

    如果您使用的是 Maven 目录中提供的 Gson,您可以从刚刚获得的响应中初始化一个变量,如下所示:

    Gson gson = new Gson();
    Message m = gson.fromJson(response, Message.class);
    

    从那里开始,一个 get 就足够了。
    还有另一种选择,它涉及更多的工作,但它也可以正常工作。它包括从来自服务器的 JSON 响应中创建一个 JSONObject,然后调用一个 get 到该 JSONObject,它看起来像这样:

            JSONObject obj = null;
            try {
                obj = new JSONObject(response);
            } catch (JSONException e) {
                e.printStackTrace();
            }
    

    然后,您可以调用另一个 get,但来自 obj,如下所示:

    JSONObject response = obj.getJSONObject("response");
    JSONArray<FwdMessages> array = response.getJSONArray("fwd_messages");
    

    从那里开始,您只需 1 步就可以获取您正在寻找的对象或属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多