如何在JSON数组中获取JSON数组?

时间:2015-09-17 14:05:37

标签: java android arrays json chat

我对来自url(服务器)的消息进行了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;
    }
}
&#13;
&#13;
&#13;

Forwarded Messages class

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

}
&#13;
&#13;
&#13;

那么如何才能将转发后的消息转发到其他转发的消息中并将其放入列表中?应该注意的是,一个fwd消息对象来自另一个。对不起我的英文:)

2 个答案:

答案 0 :(得分:0)

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

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");
                        }
                    }
                }
            }
        }
    }
}

答案 1 :(得分:0)

如果您正在使用Maven目录中提供的Gson,则可以从您刚刚收到的响应初始化变量,如下所示:

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

从那里,获得就足够了。
还有另一种选择,它涉及更多的工作,但它也可以正常工作。它包括从服务器的JSON响应中生成JSONObject,并调用get JSONObject,它看起来像这样:

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

然后,您可以拨打另一个,但是来自obj,如下所示:

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

从那里开始,您只需1远离获取您正在寻找的对象或属性。