[英]Parsing iterative json objects using retrofit/gson
我从我需要连接的服务器上收到类似以下内容的信息:
{
"properties": {
"prop1": {
"type": "string",
"title": "string"
},
"prop2": {
"type": "string",
"title": "string"
},
"prop3": {
"type": "string",
"title": "string"
},
"prop4": {
"type": "string",
"title": "string"
}
}
}
显然,服务器发送带有 id 字段的对象数组会更理想,但不幸的是我无法更改它。 “prop”后面的数字可以无限增加(尽管实际上不会超过 50 左右),在 Retrofit 2/GSON 中是否有一种优雅的方法来处理这个问题? 或者我是否需要每次都拦截这个电话并手动执行?
在一个完美的世界中,我想最终得到一组具有 id 字段(1、2、3 等)的“Prop”pojo,甚至每个字段中都有“prop1”、“prop2”等目的。
以下是您问题的提示:
您必须创建模型类,如:
public class PropertiesData {
public ArrayList<Properties> properties = new ArrayList<>();
//getters setters
public ArrayList<Properties> getProperties() {
return properties;
}
public void setProperties(ArrayList<Properties> properties) {
this.properties = properties;
}
public class Properties {
Map<String, SubProperties> subPropertiesMap = new HashMap<>();
//getters setters
public Map<String, SubProperties> getSubPropertiesMap() {
return subPropertiesMap;
}
public void setSubPropertiesMap(Map<String, SubProperties> subPropertiesMap) {
this.subPropertiesMap = subPropertiesMap;
}
}
public class SubProperties {
public String type;
public String title;
//getters setters
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
您必须创建自定义Gson Builder :
Gson gson_gd = new GsonBuilder().registerTypeAdapter(
PropertiesData.class, new JsonDeserializer<PropertiesData>() {
@Override
public PropertiesData deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject elements= json.getAsJsonObject();
return new Gson().fromJson(elements,
PropertiesData.class);
}
}
).create();
并在构建改造实例时使用它:
.setConverter(GsonConverterFactory.create(gson_gd)).build();
我根据提供的 json 创建的所有内容。
希望它会帮助你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.