Массив в массиве JSON

Рейтинг: 1Ответов: 1Опубликовано: 10.04.2015

Есть JSON строка примерно такая, как ниже. Есть вложенные массивы. Как получить первый "albs", с альбомами я знаю, а как получить вложенные в массив "sites" я не понимаю. Т.е. как найти список альбомов id:244 (альбомы id:172 и id:88 в примере)?

{
"result": "0",
"albCnt": "2",
"albs": [
    {
        "id": "100",
        "name": "Мой альбом 1",
    },
    {
        "id": "2",
        "name": "Мой альбом 2",
    }
],
"sites": [
    {
        "id": "233",
        "name": "Имя сайта 233"
    },
    {
        "id": "239",
        "name": "Имя сайта 239"
    },
    {
        "id": "244",
        "name": "Имя сайта 244",
        "albCnt": "2",
        "albs": [
            {
                "id": "172",
                "name": "Альбом сайта 172",
            },
            {
                "id": "88",
                "name": "Альбом сайта 88",
            }
        ]
    },
    {
        "id": "571",
        "name": "Имя сайта 571"
    }
]

Первые ищу так:

 JSONObject strJS = null;
 strJS = new JSONObject(TestJS);
 JSONArray js_albs = strJS.getJSONArray("albs"); // Массив альбомов
 if (js_albs.length() != 0) {
     for (int i = 0; i < js_albs.length(); i++) {
         JSONObject temp = js_albs.getJSONObject(i);
         arr2_name.add(temp.getString("name"));
         arr2_id.add(temp.getInt("id"));
         }

JSONArray js_temp = strJS.getJSONArray("sites");
    int st = (int) arr1_id.get(id);
    JSONArray js_spis = js_temp.getJSONArray(st);
    for (int k = 0; k < cnt; k++) {
        JSONObject temp = js_spis.getJSONObject(k);
        arr2_name.add(temp.getString("name"));
        arr2_id.add(temp.getInt("id"));

Ответы

▲ 2

после строки arr2_id.add(temp.getInt("id")); добавьте:

if (temp.has("albs")) {
  JSONArray subAlbums = temp.getJSONArray(albs);
  for (int j = 0; j < subAlbums.length(); j++) {
    // ...
  }
}

Но лучше конечно использовать библиотеку GSON - она сама все сделает.

UPD, полный код:

 JSONObject strJS = null;
 strJS = new JSONObject(TestJS);
 JSONArray js_albs = strJS.getJSONArray("albs"); // Массив альбомов
 if (js_albs.length() != 0) {
     for (int i = 0; i < js_albs.length(); i++) {
         JSONObject temp = js_albs.getJSONObject(i);
         arr2_name.add(temp.getString("name"));
         arr2_id.add(temp.getInt("id"));
         }

JSONArray js_temp = strJS.getJSONArray("sites");
    int st = (int) arr1_id.get(id);
    JSONArray js_spis = js_temp.getJSONArray(st);
    for (int k = 0; k < cnt; k++) {
        JSONObject temp = js_spis.getJSONObject(k);
        arr2_name.add(temp.getString("name"));
        arr2_id.add(temp.getInt("id"));
        if (temp.has("albs")) {
        JSONArray subAlbums = temp.getJSONArray(albs);
        for (int j = 0; j < subAlbums.length(); j++) {
          // ...
        }
      }
   }