1

I have following structure in json.

[
  {
    "Name": "FieldMapName1",
      "Fields": [
      {
        "Name": "FieldName1",
        "Values": [
          {
            "ID": 1,
            "Value": "Value1"
          },
          // ...
        ]
      },
      // ...
    ]
  },
  // ...
]

Is there a way to convert it to:

Map<String, FieldMap> fieldMap;

Each field map object contains:

Map<String, Field> fields;

And each Field:

Map<Integer, String> values;

Should I write custom deserializer or there is some better approach?

4

2 回答 2

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);
于 2013-07-24T17:26:33.323 回答
1

您绝对无法在要解析的类结构中解析 JSON,主要是因为您的 JSON 不代表该类结构......

首先,您的整个 JSON 被 包围[ ],因此您无法将其解析为任何Map,因为 aMap是一个对象(由 包围{ }),并且您想要转换为地图的其他元素也会发生同样的情况......

您的 JSON 元素实际上将由此类结构表示:

List<FieldMap>

class FieldMap
  String Name
  List<Field> Fields

class Field
  String Name
  List<Value> Values

class Value
  int ID
  String Value

所以你可以在这个结构中解析你的 JSON,然后将数据移动到你的类结构中,或者你肯定必须编写一个自定义的反序列化器......你可以在这里找到一个例子......你可以试试,如果你有麻烦再问一次...

于 2013-07-25T15:32:38.730 回答