如何使用Google Json Parsing API(Gson)解析json中的一些动态字段?

我有一个结构化的Json在某些领域是可变的,我如何使用Gson google json api在Java中正确解析(反序列化)?

Json的例子:

{ type: 'sometype', fields: { 'dynamic-field-1':[{value: '', type: ''},...], 'dynamic-field-2':[{value: '', type: ''},...], ... } 

动态字段将根据发送的结构更改其名称。

有办法吗?

您可以使用Raph Levien建议的自定义(反)序列化,但是,Gson本身可以理解地图。

如果你运行它,你将获得输出{“A”:“B”}

 Map map = new HashMap(); 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>() {}.getType()); System.out.println(fromJson.get("A")); 

我希望有所帮助。 🙂

使用google-gson我这样做:

 JsonElement root = new JsonParser().parse(jsonString); 

然后你可以使用json。 例如:

 String value = root.getAsJsonObject().get("type").getAsString(); 

是的,编写一个带有通用JsonElement对象的自定义反序列化器。 这是一个例子:

http://benjii.me/2010/04/deserializing-json-in-android-using-gson/