2017-10-17 5 views
0

Gson 라이브러리를 사용하여 JSON에서 JSON 배열을 가져오고 싶습니다. 그러나 여기에 중첩 JSON 배열에서 특정 JSON 배열에 액세스하는 방법에 대한 문제가 있습니다. 이것은 내가 노력하고 방법은 다음과 같습니다gson을 사용하여 특정 객체 배열을 구문 분석하는 방법은 무엇입니까?

내 모델 클래스 :

public class ComposeSMSList { 

@SerializedName("userMessages") 
@Expose 
private List<UserMessage> userMessages = null; 
@SerializedName("userPhoneBooks") 
@Expose 
private List<UserPhoneBook> userPhoneBooks = null; 
@SerializedName("usersSendorIds") 
@Expose 
private List<UsersSendorId> usersSendorIds = null; 
@SerializedName("userTemplates") 
@Expose 
private List<UserTemplate> userTemplates = null; 

public List<UserMessage> getUserMessages() { 
    return userMessages; 
} 

public void setUserMessages(List<UserMessage> userMessages) { 
    this.userMessages = userMessages; 
} 

public List<UserPhoneBook> getUserPhoneBooks() { 
    return userPhoneBooks; 
} 

public void setUserPhoneBooks(List<UserPhoneBook> userPhoneBooks) { 
    this.userPhoneBooks = userPhoneBooks; 
} 

public List<UsersSendorId> getUsersSendorIds() { 
    return usersSendorIds; 
} 

public void setUsersSendorIds(List<UsersSendorId> usersSendorIds) { 
    this.usersSendorIds = usersSendorIds; 
} 

public List<UserTemplate> getUserTemplates() { 
    return userTemplates; 
} 

public void setUserTemplates(List<UserTemplate> userTemplates) { 
    this.userTemplates = userTemplates; 
} 

} 

가 지금은 부모 클래스에서 사용자 전화 번호부 클래스에 액세스 할 수 있습니다.
우아한 방법이 있나요?

내 코드 :

Gson mGson=new Gson(); 
List<ComposeModel> posts=Arrays.asList(mGson.fromJson(response.toString(),ComposeModel.class)); 

for (int i=0;i<posts.size();i++){ 
    ComposeModel object = new ComposeModel(posts.get(i).getComposeSMSList().getUserMessages().get(i).getId(),posts.get(i).getComposeSMSList().getUserMessages().get(i).getMessage()); 
    global.add(object); 
} 
mUserMsgAdpater=new UserMsgAdpater(mContext,global); 
mRecyclerView.setAdapter(mUserMsgAdpater); 
+0

당신은 당신의 JSON의 구조를 삽입 할 수 있을까요? –

+0

"userMessages"[ { "ID"1 "메시지": "TODAY 철학 HONEY 방울 : \ n * // \"! Thanathu thavarai thaney unargiravan buthisaali \ "\\\\ * \ n-BHAGAWAN SHREESATHYAM \ [email protected] " 를}]"userPhoneBooks "[ { "ID "1 "phonebookGroupname ":"ISKON " "nrOfContacts "2,924 }] – ashish

+0

난 네 배열을 내 json에서 지금 나는 전체 json 배열에서 사용자 전화 번호부 배열에 액세스하고 싶습니다. 이걸 어떻게 할 수 있습니까? – ashish

답변

0

당신의 ComposeModel 클래스는 무엇입니까? 어쨌든, 당신이 코멘트에 삽입 한 Json은 불완전합니다. 당신은 이런 방식으로 JSON을 역 직렬화 할 수

public class ComposeSMSList { 

    private List<UserMessage> userMessages = null; 
    private List<UserPhoneBook> userPhoneBooks = null; 
    private List<UsersSendorId> usersSendorIds = null; 
    private List<UserTemplate> userTemplates = null; 

    public List<UserMessage> getUserMessages() { 
     return userMessages; 
    } 

    public void setUserMessages(List<UserMessage> userMessages) { 
     this.userMessages = userMessages; 
    } 

    public List<UserPhoneBook> getUserPhoneBooks() { 
     return userPhoneBooks; 
    } 

    public void setUserPhoneBooks(List<UserPhoneBook> userPhoneBooks) { 
     this.userPhoneBooks = userPhoneBooks; 
    } 

    public List<UsersSendorId> getUsersSendorIds() { 
     return usersSendorIds; 
    } 

    public void setUsersSendorIds(List<UsersSendorId> usersSendorIds) { 
     this.usersSendorIds = usersSendorIds; 
    } 

    public List<UserTemplate> getUserTemplates() { 
     return userTemplates; 
    } 

    public void setUserTemplates(List<UserTemplate> userTemplates) { 
     this.userTemplates = userTemplates; 
    } 
} 

: 당신이 당신의 ComposeSMSList 클래스가있는 경우

ComposeSMS.json

{ 
    "userMessages":[ 
    { 
     "id":1, 
     "message":"this is a message" 
    } 
    ], 
    "userPhoneBooks":[ 
    { 
     "id":1, 
     "phonebookGroupname":"ISKON", 
     "nrOfContacts":2924 
    } 
    ], 
    "usersSendorIds":[ 
    { 
     "id":1 
    } 
    ], 
    "userTemplates":[ 
    { 
     "id":1, 
     "templateName":"aTemplate" 
    } 
    ] 
} 

: 나는 생각이 같은 것입니다

 Gson gson = new Gson(); 
     String filename="/pathTo.../composeSMS.json"; 
     JsonReader reader = new JsonReader(new FileReader(filename)); 
     ComposeSMSList composeSMSList= gson.fromJson(reader, ComposeSMSList.class); 
     System.out.println("composeSMSList: " + gson.toJson(composeSMSList)); 

질문에 UserPhoneBook에 액세스해야하지만 코드에서 UserMessage를 사용해보십시오.

어쨌든, 당신은이 방법으로 액세스 할 수 있습니다

 List<UserPhoneBook> userPhoneBooks= composeSMSList.getUserPhoneBooks(); 
     for(UserPhoneBook upb: userPhoneBooks) 
     { 
      System.out.println("UserPhoneBook id: " + upb.getId()); 
      System.out.println("UserPhoneBook nrOfContacts: " +upb.getNrOfContacts()); 
      System.out.println("UserPhoneBook phonebookGroupname: " +upb.getPhonebookGroupname()); 
     } 
+0

당신의 대답에 감사드립니다. – ashish