2016-04-02 7 views
0

Я хав этого JSON:Как получить некоторые элементы вложенных объектов JSON в массиве JSON

[ 
    { 

    "title": "This a Sample title for each post_title", 

    "excerpt": "And this is a sample of the post_body, 

    "author": "King Spark", 

    "featured_picture": { 

     "source": "https://exapmple.com/blah/blah/image.jpg", 
     "year": "2015", 
     "ownwer": "Akim Man", 

    }, 

    },... 

Из JSON мне нужно только названия, отрывка элементов основных объектов. Тогда из featured_picture объектов, я хочу только источник элемент.

Я написал этот код и, кажется, не работает:

private void parseData(JSONArray array){ 
     Log.d(TAG, "Parsing array"); 

     for(int i = 0; i<array.length(); i++) { 
      PostItems postItem = new PostItems(); 
      JSONObject jsonObject = null; 
      try { 
       jsonObject = array.getJSONObject(i); 
       postItem.setPost_title(jsonObject.getString(ConfigPost.TAG_POST_TITLE)); 
       postItem.setPost_body(jsonObject.getString(ConfigPost.TAG_POST_BODY)); 

       //Parsing featured_pocture object 


       for (int f = 0; f<array.length(); f++) { 
        JSONObject object = array.getJSONObject(f); 
        JSONObject postImage = object.getJSONObject("featured_picture"); 
        String imageURL = postImage.getString("source"); 
        postItem.setPost_image(imageURL); 
       } 





      } catch (JSONException w) { 
       w.printStackTrace(); 
       //Toast.makeText(this, "Error in parsing Json", Toast.LENGTH_LONG).show(); 
      } 
      mPostItemsList.add(postItem); 
     } 

    } 

ответ

0

Попытка разобрать вложенную JSON, как таким образом:

private void parseData(JSONArray array){ 
    Log.d(TAG, "Parsing array"); 

    for(int i = 0; i<array.length(); i++) { 
     PostItems postItem = new PostItems(); 
     JSONObject jsonObject = null; 
     try { 
      jsonObject = array.getJSONObject(i); 

    postItem.setPost_title(jsonObject.getString(ConfigPost.TAG_POST_TITLE)); 

    postItem.setPost_body(jsonObject.getString(ConfigPost.TAG_POST_BODY)); 

    //Parsing featured_picture object 
    JSONObject postImage = jsonObject.getJSONObject("featured_picture"); 

    postItem.setPost_image(postImage.getString("source")); 


     } catch (JSONException w) { 
      w.printStackTrace(); 
      //Toast.makeText(this, "Error in parsing Json", Toast.LENGTH_LONG).show(); 
     } 
     mPostItemsList.add(postItem); 
    } 

} 
+0

Спасибо, сработало! :) – Faraday

0

Вы не будете продолжать читать массив здесь

for (int f = 0; f<array.length(); f++) { 

featured_picture является запись в карте и возвращает карта тоже.

В Acces должно быть так:

array.getJSONObject(i).getJSONObject("featured_picture").getString("source"); 
0

Вы должны идентифицировать объект и массив в JSON, то найти значение по ключу, как только вы узнали, то сложность JSON не имеет значения для разбора follow tutorial

0

ваш код for (int f = 0; f<array.length(); f++) { JSONObject object = array.getJSONObject(f); JSONObject postImage = object.getJSONObject("featured_picture"); String imageURL = postImage.getString("source"); postItem.setPost_image(imageURL); } неверен, эта часть json не является массивом, а объектом внутри другого jsonObject.

0

Здесь нет необходимости повторять цикл для чтения вложенного JSONobject.

Потому что «featured_picture» дает только JSONObject не массив. В случае, если его возвращение массива следует читать, как это:

JSONObject rootObject=new JSONObject(); 
JSONArray nestedObject=rootObject.getJSONArray("key"); 

Здесь я Изменив код в правильной манере надежде, что это поможет вам.

for(int i = 0; i<array.length(); i++) { 
      PostItems postItem = new PostItems(); 
      JSONObject jsonObject = null; 
      try { 
       jsonObject = array.getJSONObject(i); 
        postItem.setPost_title(jsonObject.getString(ConfigPost.TAG_POST_TITLE)); 
       postItem.setPost_body(jsonObject.getString(ConfigPost.TAG_POST_BODY)); 

       //Parsing featured_pocture object 

JSONObject postImage = jsonObject.getJSONObject("featured_picture"); 
    String imageURL = postImage.getString("source"); 
     postItem.setPost_image(imageURL); 


      } catch (JSONException w) { 
       w.printStackTrace(); 
       //Toast.makeText(this, "Error in parsing Json", Toast.LENGTH_LONG).show(); 
      }