gpt4 book ai didi

java - 使用 Gson 动态解析 JSON 字段类型

转载 作者:行者123 更新时间:2023-11-30 06:49:38 25 4
gpt4 key购买 nike

我有以下 API 响应:

{  
"data":{
"categoryFields":[
{
"name":"brand",
"label":"Marca",
"values":[
{
"key":53,
"value":"Alfa Romeo"
},
{
"key":55,
"value":"Audi"
}
]
},
{
"name":"year",
"label":"Año", ,
"dataType":"select",
"values":[
{
"key":2017,
"value":2017
},
{
"key":2016,
"value":2016
}
]
},

]
}
}

好的,第一个 categoryField 中的值为:

"key":53 INT,
"value":"Alfa Romeo", STRING

在第二个categoryField中,值是:

 "key":2017, INT
"value":2017, INT

还有另一种类型:

 "key":"string", STRING
"value":"String", STRING

我需要一个可以处理这些类型数据的类。像这样的东西:

public class Value {

@SerializedName("key")
@Expose
private DYNAMIC_TYPE key;

@SerializedName("value")
@Expose
private DYNAMIC_TYPE value;

}

我怎样才能做到这一点?或者有一个 Gson 函数可以帮助我做到这一点?

最佳答案

解决方案

public class CategoryValueDeserializer implements JsonDeserializer<CategoryValue> {
@Override
public CategoryValue deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {

final JsonObject jsonObject = json.getAsJsonObject();

final JsonElement jsonKey = jsonObject.get("key");
final String key = jsonKey.getAsString();

final JsonElement jsonValue = jsonObject.get("value");
final String value = jsonValue.getAsString();

CategoryValue categoryValue = new CategoryValue();
categoryValue.setKey(key);
categoryValue.setValue(value);

return categoryValue;

}
}

//改造

 final Gson gson = new GsonBuilder()
.registerTypeAdapter(Response.class, new CategoryValueDeserializer())
.create();

Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(END_POINT)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create());

关于java - 使用 Gson 动态解析 JSON 字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com