java - 如何解析这些json字符串呢? (使用gson)

标签 java json gson

我有一个像这样的 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;
}

最佳答案

关于您的帖子,我有几件事要分享:

  1. 你将面临的最大问题是用户有很奇怪的 json 序列化 - 它的 id 用作键。我能想到的唯一方法是使用 enableComplexMapKeySerialization GsonBuilder 的选项。那么你需要声明UsewrInfo只包含一个元素 Map<Integer, User>并声明User所有属性都映射到 id 的 bean。

  2. 我想您知道使用 gson 不需要 类字段名称与 gson 中的键匹配。例如你仍然可以 使用驼峰式的 newOffset 并在其中解析字段 new_offset。 您只需放置 gson 注释即可 @SerializedName("new_offser") 位于字段声明上方。

  3. 以下是如何使用 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 .

  4. 关于 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 将为您解析它们。

  5. 顺便说一下,我想你知道,但是你可以反序列化 json 例如,数组到列表。只需声明 相应的字段,gson 将自动存储在其中。

希望所有这些都能帮助您反序列化数据。快乐编码!

关于java - 如何解析这些json字符串呢? (使用gson),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9155764/

相关文章:

java - Groovy:以 Maps 作为键的 MultiValueMap

java - 无法启用 JNI 调试器

android - 任何参数都不能使用 Gson 提供的参数来调用

android - 使用 greenDao 持久化字符串数组

Java > 计算 JSON 响应中 null 和 0 的出现次数

java - 如何将 Parcelable 数组列表添加到部分回收器 View 适配器

java - 露天tomcat没有开始

c# - Json.NET 配置序列化程序以重用相等标记的对象实例

javascript - 如何动态渲染和更新chart.js折线图

java - Jersey:硬编码 POST/PUT ObjectMapper,不需要 Content-Type header