java - 反序列化 GSON 中对象的 JSON 集合(可能与另一个集合)

标签 java json parsing collections gson

今天我一直在使用 GSON 进行 JSON 解析,很多事情都进展顺利,麻烦最少。

但是,对于以下 JSON 字符串,我开始遇到一些问题;

{"success":1,"response":{"dvds":{"IronMan":{"rating":"awesome"},"BatMan":{"rating":"awesome"},"Smurfs":{"rating":"childish"}}}}

在此 JSON 中,我有一个“响应”集合,其中包含响应类型的集合。在该示例中,唯一包含的响应类型是 DVD。 但我的问题就在这里;我希望将“dvds”的每个子项解析为列表响应,每个子项都是一个 Dvd 类对象(包含字符串“标题”和字符串“评级”)

到目前为止,解析单独的值/对象和解析数组没有出现任何实际问题,但我无法解决如何解决解析此类集合的问题。

今天谷歌搜索一直在引用我“TypeTokens”,但是查看有关此问题的各个主题中的代码,我仍然不明白如何在我的使用场景中实现它。

所以,具体来说; “如何让 GSON 正确识别我的响应类型和 DVD 集合?”

目前我的 ResponseData.class 如下所示:

public class ResponseData {
    public int success;

    public List<ResponseTypes> responsetypes;

    public class ResponseType{
        public List<Dvd> Dvds;
    }

    public class Dvd{
        public String title;
        public String rating;
    }
}
这就是我以基于数组的形式看待这个问题的方式,但这次我需要在遇到对象集合的情况下应用它。在所有情况下,我认为对象的类应该能够通过其父级的名称来识别。

目前解析启动如下;

try{
    Gson gson = new Gson();
    Reader reader = new InputStreamReader(stream);
    ResponseData responsedata = gson.fromJson(reader, ResponseData.class);
    return responsedata;
}

我真的希望有人能帮助我!谢谢!

最佳答案

您遇到了一些问题:

  1. 类(class) ResponseData应该持有 List<ResponseType>而不是List<ResponseTypes>
  2. 您提供的 json 与上面的类不匹配。 该 json 的准确类是:

    public class ResponseData
    {
        public int success;
        public Map<String, Map<String, Dvd>> response;
    
        public class Dvd
        {
            public String rating;
        }
    }
    
  3. 为了用 json 描述列表,您应该使用:“[ ]”。例如:[1,2,3]。您可以阅读有关 json here 的更多信息

  4. 如果您希望 json 描述您上面描述的类层次结构。它应该看起来像:

    {"success":1,"responseTypes":[{"Dvds":[{"title":"钢铁侠","rating":"太棒了"},{"title": " bat 侠", "评级":"真棒"},{"title":"蓝 Sprite ", "rating":"幼稚"}]}]}

  5. 请注意,除非您声明变量名称和 json 变量名称之间的映射,否则您应该使用相同的名称。例如“Dvds”和“responseTypes”

关于java - 反序列化 GSON 中对象的 JSON 集合(可能与另一个集合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19299325/

相关文章:

java - Spring Boot 中的异常处理

java - 通过 HotKey 在 Eclipse 中防止代码格式化

java - 从 Java 应用程序发送时未在服务器中获取正确的 json

javascript - 无法将 json 转换为 javascript 对象/数组

java - 当组更改时如何更改细节带颜色?

java - token 类型取决于以下 token

json - 选择两个 Hive 表的结果作为 JSON 输出

c# - 解析 ANSI 转义码?

java - 无法将 '' 解析为整数,然后退出

java - 在 java 中以编程方式关闭打开的 XML 元素标签