2017-10-17 14 views
0

Je veux obtenir un tableau d'objets JSON dans JSON en utilisant la bibliothèque Gson, mais j'ai un problème avec l'accès à un tableau JSON particulier dans un tableau JSON imbriqué. Voilà comment je suis en train:Comment analyser un tableau particulier d'objet en utilisant gson?

Mon modèle Classe:

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

} 

Maintenant, je veux accéder au téléphone de l'utilisateur classe livre de la classe parente.
Existe-t-il une manière élégante de faire ceci?

Mon code:

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

Pourriez-vous insérer la structure de votre JSON? –

+0

"userMessages": [ { "id": 1, "message": "PHILOSOPHIE AUJOURD'HUI DROPS DE MIEL: \ n * // \" Thanathu thavarai thaney unargiravan buthisaali! \ "\\\\ * \ n-BHAGAWAN SHREESATHYAM \ [email protected] » },] "userPhoneBooks": [{ "id": 1, "phonebookGroupname": "ISKON", "nrOfContacts": 2924}, ] – ashish

+0

j'ai quatre choix dans mon json maintenant je veux accéder à l'ensemble de l'annuaire téléphonique de l'utilisateur de l'ensemble du tableau json comment puis-je atteindre ce – ashish

Répondre

0

Quelle est votre classe ComposeModel? Quoi qu'il en soit, le Json que vous avez inséré dans votre commentaire est incomplet. Je supposé est quelque chose comme ceci:

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" 
    } 
    ] 
} 

Si vous avez votre ComposeSMSList Classe:

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

Vous pouvez désérialiser votre JSON ainsi:

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

Dans votre question, vous demandez à accéder à l'UserPhoneBook, mais dans votre code, vous essayez avec le UserMessage.

Quoi qu'il en soit, vous pouvez accéder ainsi:

 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

merci pour votre réponse, j'essaie cela alors laissez-vous savoir – ashish