繁体   English   中英

如何使用gson解析对象的特定数组?

[英]How to parse a particular array of object using gson?

我想使用Gson库在JSON中获取对象的JSON数组,但是在这里我有一个关于如何访问嵌套JSON数组中的特定JSON数组的问题。 这就是我正在尝试的方法:

我的模特班:

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

您的ComposeModel类是什么? 无论如何,您插入评论中的Json是不完整的。 我以为是这样的:

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

如果您有ComposeSMSList类:

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

您可以通过以下方式反序列化json:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM