我有跟随Json String的snipets:
{
"networks": {
"tech11": {
"id": "1",
"name": "IDEN"
},
"tech12": {
"id": "2",
"name": "EVDO_B"
}
}
}
我使用一些方法将此String转换为Object:
private static Gson mGson = new Gson();
...
public static WebObjectResponse convertJsonToObject(String jsonString) {
WebObjectResponse webObjectResponse = null;
if(jsonString != null && jsonString.length() > 1){
webObjectResponse = mGson.fromJson(jsonString, WebObjectResponse.class);
}
return webObjectResponse;
}
其中WebObjectResponse
是应该代表上述字符串的类。
如果我得到静态字段,它并不复杂。
但在我的情况下,值的名称不同:tech11
,tech12
....
我可以使用@SerializedName
,但它可以在特定情况下工作,例如将“class”转换为“class_”。
如您所见networks
对象定义为tech
对象列表但具有不同的后期修复。
public class WebObjectResponse{
private DataInfoList networks = null;
}
这是静态实现,我定义了2个值tech11
和tech12
,但下一个响应可能是techXX
public class DataInfoList {
private DataInfo tech11 = null;
private DataInfo tech12 = null;
}
public class DataInfo {
private String id = null;
private String name = null;
}
将当前Json String转换为Object的好方法是什么,其中元素列表也是Objects,并且具有不同的名称?
谢谢。
答案 0 :(得分:7)
使用地图!
我会做以下
public class WebObjectResponse {
private Map<String, DataInfo> networks;
}
public class DataInfo {
private String id = null;
private String name = null;
}
// later
Gson gson = new Gson();
String json = "{\"networks\": {\"tech11\": { \"id\": \"1\",\"name\": \"IDEN\" }, \"tech12\": { \"id\": \"2\", \"name\": \"EVDO_B\" } }}";
WebObjectResponse response = gson.fromJson(json, WebObjectResponse .class);
对于json networks
中的每个对象,新条目将添加到班级Map
的{{1}}字段中。然后,您可以通过WebObjectResponse
引用它们,或者遍历键集。
假设有这样的结构
techXX
答案 1 :(得分:2)
我们需要您的课程结构以获取更多详细信息。
据我所知,我认为你需要在某处定义一些映射(我使用xml),然后尝试将json与其中一个映射匹配以创建对象。
谷歌gson很好。我在Jackson 中做到了此外,转换对象应该是微不足道的。但由于您可能有tech11
和tech12
等变量字段,因此您可能希望将“网络”值存储为字符串,然后在需要时从中提取字段。
希望我能提供帮助。
编辑:Sotirious钉它。
答案 2 :(得分:0)
请使用此链接将 SON Response 转换为 Java POJO 类 http://www.jsonschema2pojo.org/