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

Java 如何解析这些json字符串?(使用gson),java,json,gson,Java,Json,Gson,我有一个json字符串,如下所示: 我正在尝试使用gson来解析它们。不过,我有一个问题。在新的响应中,user元素包含泛型id作为键,由于它位于内部类中,我不确定如何解析它 谢谢你的帮助 下面是我为存储这些数据而构建的几个类容器: public class CometCallback { public int new_offset; public Data[] data; } public class Data { public long plurk_id;

我有一个json字符串,如下所示:

我正在尝试使用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;
}

关于你的帖子,我有几点要分享:

  • 您将面临的最大问题是,用户的行为非常怪异 json序列化-其id用作键。我能想到的唯一方法是使用
    GsonBuilder
    的选项。然后需要声明
    UsewrInfo
    仅包含一个元素
    Map
    ,并声明
    User
    bean,其中所有属性都映射到id

  • 我想您知道,使用gson时,不需要 与gson中的键匹配的类字段名。你仍然可以 使用驼峰大小写的newOffset并在其中解析字段new_offset。 您只需要放置gson注释
    @SerializedName(“new_offer”)
    位于字段声明上方

  • 下面是如何使用gson从json进行反序列化。它是 直截了当地说:

    Gson gson = new GsonBuilder()
        .enableComplexMapKeySerialization()
        .serializeNulls()
        .setDateFormat(MY_DATE_FORMAT)
        .create();
    CometCallback cometCallback = gson.fromJson(jsonFile, CometCallback.class) ;
    
    我将在下一节讨论
    DateFormat
    选项。
    serializeNulls
    是必需的,因为我看到了带有null的属性 值也被序列化,如
    “出生日期”:null

  • 关于
    DateFormat
    -我看到你发布了声明
    公共字符串
    作为字符串。然而,gson可以直接从json解析日期
    字符串,只要指定日期的确切格式
    我会在的。这是我认为你定义日期的确切格式
    在:

    现在宣布这一点,并在
    setDateFormat(我的日期格式)
    您应该能够更改的方法 您的所有日期都将被读取为日期,gson将为您解析这些日期

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


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

    关于你的帖子,我有几点要分享:

  • 您将面临的最大问题是,用户的行为非常怪异 json序列化-其id用作键。我能想到的唯一方法是使用
    GsonBuilder
    的选项。然后需要声明
    UsewrInfo
    仅包含一个元素
    Map
    ,并声明
    User
    bean,其中所有属性都映射到id

  • 我想您知道,使用gson时,不需要 与gson中的键匹配的类字段名。你仍然可以 使用驼峰大小写的newOffset并在其中解析字段new_offset。 您只需要放置gson注释
    @SerializedName(“new_offer”)
    位于字段声明上方

  • 下面是如何使用gson从json进行反序列化。它是 直截了当地说:

    Gson gson = new GsonBuilder()
        .enableComplexMapKeySerialization()
        .serializeNulls()
        .setDateFormat(MY_DATE_FORMAT)
        .create();
    CometCallback cometCallback = gson.fromJson(jsonFile, CometCallback.class) ;
    
    我将在下一节讨论
    DateFormat
    选项。
    serializeNulls
    是必需的,因为我看到了带有null的属性 值也被序列化,如
    “出生日期”:null

  • 关于
    DateFormat
    -我看到你发布了声明
    公共字符串
    作为字符串。然而,gson可以直接从json解析日期
    字符串,只要指定日期的确切格式
    我会在的。这是我认为你定义日期的确切格式
    在:

    现在宣布这一点,并在
    setDateFormat(我的日期格式)
    您应该能够更改的方法 您的所有日期都将被读取为日期,gson将为您解析这些日期

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


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

    谢谢你的建议,我现在有几件事要尝试:)谢谢你的信息。我现在似乎能够提取出我想要的价值!我需要做更多的测试来了解“enableComplexMapKeySerialization”的功能。。。似乎即使不启用ComplexMapKeySerialization,它仍将反序列化映射对象。我猜Map不是一个复杂的键,但很高兴知道我将来可以像这样解析复杂的键!我还修复了正确解析日期对象的代码。再次感谢!谢谢你的建议,我现在有几件事要尝试:)谢谢你的信息。我现在似乎能够提取出我想要的价值!我需要做更多的测试来了解“enableComplexMapKeySerialization”的功能。。。似乎即使不启用ComplexMapKeySerialization,它仍将反序列化映射对象。我猜Map不是一个复杂的键,但很高兴知道我将来可以像这样解析复杂的键!我还修复了正确解析日期对象的代码。再次感谢!