2016-08-07 4 views
0

Im Im이 JSON 파일을 구문 분석하고 문자열을 가져 오는 앱에서 작동하지만 한 String이 있습니다. 왜 내 활동에 위장 할 수 없는지 전혀 알지 못합니다. 문자열은 Object> Array> String입니다. 2 개의 활동과 1 개의 모델이 있습니다. MainActivity : 여기서 JSON을 파싱합니다. DetailActivity : String이 필요한 곳. PostModel : 모든 세터와 게터가있는 모델입니다.객체 내부의 배열을 반복하여 JSON String 가져 오기

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()); 
      } 

마지막 파일에서 < 문자열을 가져와야합니다. 나는 많은 시간을 보냈다. 객체 내부의 배열을 반복 할 수있는 방법을 이해할 수 없다.

미리 감사드립니다.

__________update________

나는 그런 식으로 구문 분석 관리 :

  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

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

에서의 StringBuffer를 사용하지만 지금은 배열 브래킷 등으로 동영상 ID를 받고 있어요 그 [ "F3lyzrt"] 나는 그것을 단지 F3lyzrt 인 문자열로 원한다. 그래서 그것을 내 YouTube 플레이어에 전달할 수있다. 모든 조언이 충당됩니다. 그것은 다음과 같이 보일 것이다

+0

당신의 JSON은 형식 https://jsonformatter.curiousconcept.com/ –

+0

예 나는 나는 그것의 배열을 필요로하는 문자열을 퍼트 전체 코드를 삽입 didnt한다 원하는 JSON 포매터 온라인 도구에서 것을 확인 errors.please 데 및 개체. – Yasser

+0

가능한 복제 : https://stackoverflow.com/questions/9605913/how-to-parse-json-in-android/9606629#9606629 – nasch

답변

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 또는 잭슨 사용을 고려할 수 있지만. 이러한 라이브러리를 사용하면 데이터를 표현할 모델을 정의 할 수 있습니다 (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); 
         } 
+0

고마워요, MainActivity에서 볼 수 있듯이 질문을 썼을 때 문자열을 얻을 수 없습니다. 내 말 뜻을 보여줄 수 있다면 좋을 것 같습니다. – Yasser

+0

대부분의 코드를 업데이트 했으므로 내가 제안한 것을 만들었습니다. 또는 내가 생각한 것 :-) - 그러나 여전히 작동하지 않습니다. 여기서 무엇이 잘못 되었습니까? – Yasser

+0

질문을 현재 코드로 업데이트하십시오. 당신이 문제가있는 부분에 그것을 내려 놓으십시오. "효과가 없다"는 의미를 설명하십시오. – nasch

관련 문제