1

我正在构建一个客户端服务器 Web 应用程序并坚持这一点:

我得到了一组用户“FriendsIDList:”:

"data":{
    "name":"anna",
    "BirthDate":"2010-01-01",
    "FriendsIDList":{
        "email":"anna1@gmail.com",
        "email":"anna2@gmail.com"
    }
}}

如果没有数组,我可以毫无问题地读取这样的数据:

GsonBuilder gb = new GsonBuilder();
gb.setDateFormat("yyyy-MM-dd");
gson = gb.create();
newUser= gson.fromJson(data, user.class);

我怎样才能读取这个数组?我LinkedList在我的用户类中使用:

LinkedList FriendsIDList;
4

2 回答 2

0

JSON 规范是这样说的:

名称是一个字符串。每个名称后面都有一个冒号,将名称与值分开。单个逗号将值与后面的名称分开。对象中的名称应该是唯一的。

不幸的是,Gson 本身并不支持名称/值对中的非唯一名称。因此它无法正确处理您的“电子邮件”属性:

{"email":"anna1@gmail.com","email":"anna2@gmail.com"}

您可以通过编写自己的TypeAdapter来解决此问题。您的实现应该将电子邮件字符串累积到一个列表中。您可能希望在数据模型中使用特殊的包装对象,例如 EmailAddressList 来简化此操作。

static class FriendsIDList {
  List<String> emails;
}

static TypeAdapter<FriendsIDList> friendsIDListAdapter
        = new TypeAdapter<FriendsIDList>() {
    ... // code to read and write emails
}
于 2012-06-01T05:07:36.810 回答
0

如果您有一个包含 FriendList 的用户,那么您的最后一行将像您提到的那样工作。

尝试按如下方式定义您的 FriendList 属性:

LinkedList<Email> FriendList;

并创建电子邮件类:

public class Email {
  private String email;
}
于 2012-05-31T13:20:57.190 回答