通过迭代对象

时间:2016-08-07 12:29:42

标签: java android json

我正在开发一个应用程序,我解析JSON文件并从中获取字符串,但有一个字符串我不知道为什么我无法进入我的活动。 String是Object>数组>串 我有2个活动和1个模型。 MainActivity:我解析JSON的地方。 DetailActivity:我需要String的地方。 PostModel:我拥有所有setter和getter的模型。

JSON:

{  
   "status":"ok",
   "count":10,
   "count_total":184,
   "pages":19,
   "posts":[  
      {  },
      {  
         "id":2413,
         ,
         "categories":[  
            {  
               "id":100,
               "slug":"logging",
               "title":"logging",
               "description":"",
               "parent":0,
               "post_count":1
            }
         ],
        "comments":[  
            {  
               "id":3564,
               "content":"<p>\u47 <\/p>\n",
               "parent":0
            }
         ],
         "comment_count":1,
         "thumbnail":"http:\/\/www.5.com\/wtent\g",
         "custom_fields":{  
            "dsq_thread_id":[  
               "2365140"
            ],
            "videoID":[  
               "--ffwf92jvDFy"
            ]
         },
         "thumbnail_images":{  
            "full":{  
               "url":"http:\/\/www.5.com\/jpg",
               "width":727,
               "height":454
            },
            "thumbnail":{  
               "url":"http:\/\/www.5.com\/wp-con50.jpg",
               "width":150,
               "height":150
            }
         }
      }
   ]
}

PostModel:

    private List<VidCast> videoIDList;
    private String videoID;
    public String getVideoID() {
        return videoID;
    }

    public void setVideoID(String videoID) {
        this.videoID = videoID;
    }


    public List<VidCast> getvideoIDList() { return videoIDList; }

    public void setvideoIDList(List<VidCast> videoIDList) {
        this.videoIDList = videoIDList;
    }


    public static class VidCast {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

}

MainActivity:

                    List<PostModel.VidCast> vidCasts = JsonPath.parse(URL_TO_HIT).read("$.posts.[*].custom_fields.[*].videoID[*]");
                    vidCasts = new ArrayList<>();
                    for (int s = 0 ; s < finalObject.getJSONArray("custom_fields").length() ; s++){
                        PostModel.VidCast vidCast = new PostModel.VidCast();
                        vidCast.setName(videoID);
                        vidCasts.add(vidCast);
                    }
                    postModel.setvideoIDList(vidCasts);

                    // adding the final object in the list
                    postModelList.add(postModel);
                }
                return postModelList;

            }
        }

DetailActivity:

StringBuffer stringBuffer = new StringBuffer();
            for(PostModel.CategoryCast categoryCast : postModel.getCategoryCastList()){
                stringBuffer.append(categoryCast.getName() + ", ");
            }

            StringBuffer videoStringBuffer = new StringBuffer();
            for(PostModel.VidCast videoIDList : postModel.getvideoIDList()) {
                videoStringBuffer.append(videoStringBuffer.toString());
            }

在最后一个文件中我需要获取&lt;&gt;串。我花了很多时间才弄清楚如何迭代对象内的数组。

提前致谢!

__________更新________

我设法以这种方式解析它:

            JSONObject customFields = finalObject.getJSONObject("custom_fields");
            JSONArray vidCastsJson = customFields.getJSONArray("videoID");
            List<PostModel.VidCast> videoIds = new ArrayList<>();
            for (int s = 0 ; s < vidCastsJson.length() ; s++){
                PostModel.VidCast vidCast = new PostModel.VidCast();                  
                vidCast.setName(vidCastsJson.optString(s));
                videoIds.add(vidCast);
                String videoID = String.valueOf(vidCastsJson);
                vidCast.setName(videoID);

我在DetailActivityStringBuffer

使用Stringbuffer
videoStringBuffer = new StringBuffer();
            for(PostModel.VidCast vidCast : postModel.getvideoIDList()) {
                videoStringBuffer.append(vidCast.getName());
                String videoID = vidCast.toString();
            }

但是现在我正在使用数组括号来获取videoID [&#34; F3lyzrt&#34;]我希望它只是一个字符串才能成为F3lyzrt,所以我可以将它传递给我的youtube播放器。任何建议都将被挪用。

谢谢,

1 个答案:

答案 0 :(得分:0)

它看起来像这样:

JSONObject root = // however you get your root JSON object
        JSONArray posts = root.optJSONArray("posts");
        for(int i=0; i < posts.length(); i++){
            JSONObject post = posts.optJSONObject(i);
            int id = post.optInt("id");
            JSONArray categories = post.optJSONArray("categories");
            // etc.
        }

虽然你可能想考虑使用GSON或Jackson。使用这些库,您可以定义一个模型来表示数据(jsonschema2pojo.org可以帮助解决这个问题),然后它会为您完成所有解析。

修改

您甚至没有尝试获取视频ID。这是您的代码:

for (int s = 0; s < finalObject.getJSONArray("videoID").length(); s++){
                             {
                              postModel.setVideoID(videoID);
                                 postModelList.add(postModel);
                            }

您是否看到了如何检索json数组的内容?

JSONArray videoIds = finalObject.getJSONArray("videoID");
for (int s = 0; s < videoIds.length(); s++){

                          String videoID = videoIds.optString(s);
                          postModel.setVideoID(videoID);
                             postModelList.add(postModel);
                        }