如何使用Gson注释解析动态列表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Gson注释解析动态列表?相关的知识,希望对你有一定的参考价值。
我正在使用Retrofit和Gson来查询API,但是我从来没有遇到像这样的JSON响应。
响应:
{
Response: {
"Black":[
{"id":"123","code":"RX766"},
{"id":"324","code":"RT344"}],
"Green":[
{"id":"3532","code":"RT983"},
{"id":"242","code":"RL982"}],
"Blue":[
{"id":"453","code":"RY676"},
{"id":"134","code":"R67HJH"}]
}
}
问题是列表元素id,例如“黑色”是动态的,所以我不知道它们将是什么。
到目前为止,我已经为内部类型创建了一个类;
class Type {
@SerializedName("id") private String id;
@SerializedName("code") private String code;
}
有可能有以下几点吗?
class Response {
@SerializedName("response")
List<Type> types;
}
然后将列表ID移动到类型中,因此Type类将成为;
class Type {
@SerializedName("id") private String id;
@SerializedName("code") private String code;
@SerializedName("$") private String type; //not sure how this would be populated
}
如果没有,如何只用Gson属性解析它?
好的,我刚看到这个问题; How to parse dynamic JSON fields with GSON?
看起来很棒,是否可以用响应对象包装通用映射?
答案
如果键是动态的,您需要一张地图。
class Response {
@SerializedName("response")
Map<String, List<Type>> types;
}
反序列化后,您可以将类型强制转换为域中更具语义的内容。
如果这不合适,您需要注册TypeAdapter
或JsonDeserializer
,并将类似地图的数据自定义反序列化为简单的List
。
以上是关于如何使用Gson注释解析动态列表?的主要内容,如果未能解决你的问题,请参考以下文章
当列表的各个项目使用Retrofit和Gson的格式不同时,如何解析json列表?
Gson 试图解析带有 @Expose(false) 注释的字段并崩溃