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

Bru*_*lho 5 java parsing json gson

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

Json的例子:

{ 
type: 'sometype',
fields: {
    'dynamic-field-1':[{value: '', type: ''},...],
    'dynamic-field-2':[{value: '', type: ''},...],
...
}
Run Code Online (Sandbox Code Playgroud)

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

有办法吗?

alp*_*ian 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));
Run Code Online (Sandbox Code Playgroud)

地图现在可以包含您的动态密钥.要再次读取Json,您需要通过TypeToken告诉Gson类型信息,这是Gson记录Java擦除的运行时类型信息的方式.

Map fromJson = 
    new Gson().fromJson(
        "{\"A\":\"B\"}", 
        new TypeToken<HashMap<String, String>>() {}.getType());
System.out.println(fromJson.get("A"));
Run Code Online (Sandbox Code Playgroud)

我希望有所帮助.:)