我有一个像这样的 json 字符串: http://pastebin.com/ckUZadwL
我正在尝试使用 gson 来解析它们。不过,我有一个问题。在新的响应中,用户元素包含通用 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;
}
最佳答案
关于您的帖子,我有几件事要分享:
你将面临的最大问题是用户有很奇怪的 json 序列化 - 它的 id 用作键。我能想到的唯一方法是使用 enableComplexMapKeySerialization
GsonBuilder
的选项。那么你需要声明UsewrInfo
只包含一个元素Map<Integer, User>
并声明User
所有属性都映射到 id 的 bean。我想您知道使用 gson 不需要 类字段名称与 gson 中的键匹配。例如你仍然可以 使用驼峰式的 newOffset 并在其中解析字段 new_offset。 您只需放置 gson 注释即可
@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 将为您解析它们。顺便说一下,我想你知道,但是你可以反序列化 json 例如,数组到列表。只需声明 相应的字段,gson 将自动存储在其中。
希望所有这些都能帮助您反序列化数据。快乐编码!
关于java - 如何解析这些json字符串呢? (使用gson),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9155764/