2015-09-17 5 views
-2

У меня есть ответ JSON с сообщениями из url (сервера).Как получить массив JSON внутри массива 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" 
 
       } 
 
       ] 
 
      } 
 
      ] 
 
     }

I имеют простой класс сообщений 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 принадлежит другому. Извините за мой английский :)

ответ

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

Не имеет значения, какой размер этого массива? Массив «fwd_messages» может состоять из 1 или 5 пересылаемых сообщений внутри – Coder

0

Если вы используете Gson, который доступен из Maven каталогов, вы можете инициализировать переменную из ответа вы только что получили, как это:

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

Оттуда прибудете будет быть достаточным.
Есть еще один вариант, который требует немного больше работы, но он отлично работает. Она состоит из принятия JSONObject из ответа JSON от сервера, и вызова добраться до этого 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 получить от получения объекта или атрибута, что вы ищете.

Смежные вопросы