2017-10-17 10 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'S PHILOSOPHY HONEY DROPSは:\ nは* // \"!Thanathu thavarai thaney unargiravan buthisaali \」\\\\ * \ n型バガヴァンSHREESATHYAM \ [email protected]」 を}、 "userPhoneBooks":[{ "ID":1、 "phonebookGroupname": "ISKON"、 "nrOfContacts":2924 }] – ashish

+0

私は、4つの配列を有します私の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