我在json中有以下结构。
[
{
"Name": "FieldMapName1",
"Fields": [
{
"Name": "FieldName1",
"Values": [
{
"ID": 1,
"Value": "Value1"
},
// ...
]
},
// ...
]
},
// ...
]
有没有办法将其转换为:
Map<String, FieldMap> fieldMap;
每个字段映射对象包含:
Map<String, Field> fields;
每个领域:
Map<Integer, String> values;
我应该编写自定义反序列化程序还是有更好的方法?
答案 0 :(得分:3)
更好的方法是使用TypeToken
。你的结构可以表示为(是的,通用是丑陋的):
Type t= new TypeToken<Map<String, Map<String, Map<Integer, String>>>>() {}.getType();
然后在json中放下你的字段,如:
{"FieldMapName1":{"FieldName1":{"1":"value1", ...}},...}
然后使用它:
Map<String, Map<String, Map<Integer, String>>> map = new GsonBuilder().create().fromJson(json, t);
答案 1 :(得分:1)
你绝对无法在你要解析它的类结构中解析你的JSON,主要是因为你的JSON不代表那个类结构......
首先,您的整个JSON被[ ]
包围,因此您无法将其解析为任何Map
,因为Map
是一个对象(由{ }
包围),你想要转换成地图的其他元素也是如此......
您的JSON元素实际上将由此类结构表示:
List<FieldMap>
class FieldMap
String Name
List<Field> Fields
class Field
String Name
List<Value> Values
class Value
int ID
String Value
因此,您可以在此结构中解析JSON,然后将数据移动到类结构中,或者您肯定必须编写custom deserializer ...您可以找到示例here。 ..你可以尝试,如果你在创建它时遇到问题,请再次询问......