我有一个结构化的Json在某些字段中是可变的,如何使用Gson google json api在Java中正确解析(反序列化)?
Json示例:
{
type: 'sometype',
fields: {
'dynamic-field-1':[{value: '', type: ''},...],
'dynamic-field-2':[{value: '', type: ''},...],
...
}
动态字段将根据发送的结构更改其名称。
有办法吗?
答案 0 :(得分:8)
你可以使用自定义(反)序列化,因为Raph Levien建议,但是,Gson本身可以理解地图。
如果你运行它,你将获得输出{“A”:“B”}
Map<String, String> map = new HashMap<String, String>();
map.put("A", "B");
System.out.println(new Gson().toJson(src));
地图现在可以包含您的动态键。要再次读取Json,您需要通过TypeToken告诉Gson类型信息,这是Gson记录Java擦除的运行时类型信息的方式。
Map fromJson =
new Gson().fromJson(
"{\"A\":\"B\"}",
new TypeToken<HashMap<String, String>>() {}.getType());
System.out.println(fromJson.get("A"));
我希望有所帮助。 :)
答案 1 :(得分:3)
使用google-gson我这样做:
JsonElement root = new JsonParser().parse(jsonString);
然后你可以使用json。 e.g:
String value = root.getAsJsonObject().get("type").getAsString();
答案 2 :(得分:1)
是的,编写一个带有通用JsonElement对象的自定义反序列化器。这是一个例子:
http://benjii.me/2010/04/deserializing-json-in-android-using-gson/