我有一个像这样的json字符串: http://pastebin.com/ckUZadwL
我正在尝试使用gson来解析它们。但是,我有一个问题。在新的响应中,user元素包含通用id作为键,因为它在内部类中,我不知道如何解析它。
感谢您的帮助。
我构建了一些用于存储数据的类容器:
public class CometCallback
{
public int new_offset;
public Data[] data;
}
public class Data
{
public long plurk_id;
public int response_count;
public Response response;
public UserInfo user;
public String type;
public Plurk plurk;
}
public class Response
{
public String lang;
public String content_raw;
public long user_id;
public String qualifier;
public long plurk_id;
public String content;
public long id;
public String posted;
}
public class Plurk extends Response
{
public Object[] replurkers;
public int responses_seen;
public int replurkers_count;
public String replurker_id;
public int response_count;
public boolean replurkable;
public Object limited_to;
public int favorite_count;
public int is_unread;
public Object[] favorers;
public int plurk_type;
public boolean replurked;
public boolean favorite;
public int no_comments;
public long owner_id;
}
答案 0 :(得分:1)
我有几件事要分享你的帖子:
GsonBuilder
的{{3}}选项。然后,您需要将UsewrInfo
声明为仅包含一个元素Map<Integer, User>
,并声明User
bean,其中所有属性都映射到id。 @SerializedName("new_offser")
高于该领域的宣言。以下是使用gson从json进行反序列化的方法。它是 真的很直白:
Gson gson = new GsonBuilder()
.enableComplexMapKeySerialization()
.serializeNulls()
.setDateFormat(MY_DATE_FORMAT)
.create();
CometCallback cometCallback = gson.fromJson(jsonFile, CometCallback.class) ;
我将在下一节讨论DateFormat
的选项。
需要serializeNulls
,因为我看到属性为null
值也会像"date_of_birth": null
一样序列化。
关于DateFormat
- 我看到你宣布public String posted;
作为字符串。然而,gson可以直接从json中解析日期
只要您指定日期的确切格式,就可以使用字符串
将在。这是我认为您定义日期的确切格式
在:
public static final SimpleDateFormat MY_DATE_FORMAT = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
现在声明并将其传递给
您应该能够改变的setDateFormat(MY_DATE_FORMAT)
方法
所有日期都被视为日期,而gson将为您解析它们。
希望所有这些都可以帮助您反序列化您的数据。快乐的编码!