如何在JSON数组中获取嵌套JSON对象中的一些元素

时间:2016-04-02 08:17:28

标签: java android arrays 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我只需要主要对象的 title excerpt 元素。然后从 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);
        }

    }

5 个答案:

答案 0 :(得分:0)

你不会在这里继续阅读数组

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

featured_picture是地图中的一个条目,也会返回一个地图。

访问应该是这样的:

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

答案 1 :(得分:0)

你必须在json中识别对象和数组然后按键查找值,一旦你学会了json的复杂性与解析follow tutorial无关紧要

答案 2 :(得分: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中的一个对象。

答案 3 :(得分: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);
    }

}

答案 4 :(得分:0)

这里不需要迭代循环来读取嵌套的JSONobject

因为&#34; featured_picture&#34;仅给出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();
            }