如何使用 GSON 解析动态 JSON 字段? [英] How to parse dynamic JSON fields with GSON?

查看:42
本文介绍了如何使用 GSON 解析动态 JSON 字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我使用 GSON 来解析来自 API 的 JSON,但我不知道如何让它解析数据中的动态字段.

So I'm using GSON to parse JSON from an API and am stuck as to how to have it parse the dynamic fields in the data.

以下是查询返回的 JSON 数据示例:

Here is an example of the JSON data returned on a query:

{

-
30655845: {
    id: "30655845"
    name: "testdata
    description: ""
    latitude: "38"
    longitude: "-122"
    altitude: "0"
    thumbnailURL: http://someimage.com/url.jpg
    distance: 9566.6344386665
}
-
28688744: {
    id: "28688744"
    name: "testdata2"
    description: ""
    latitude: "38"
    longitude: "-122"
    altitude: "0"
    thumbnailURL: http://someimage.com/url.jpg
    distance: 9563.8328713012
}
}

我目前处理单个静态值的方式是使用类:

The way I am currently handling the single static values is with a class:

import com.google.gson.annotations.SerializedName;

public class Result 
{
@SerializedName("id")
public int id;

@SerializedName("name")
public String name;

@SerializedName("description")
public String description;

@SerializedName("latitude")
public Double latitude;

@SerializedName("longitude")
public Double longitude;

@SerializedName("altitude")
public Double altitude;

@SerializedName("thumbnailURL")
public String thumbnailURL;

@SerializedName("distance")
public Double distance;
}

然后我可以简单地使用 GSON 来解析它:

And then I can simply use GSON to parse that:

Gson gson = new Gson();

Reader reader = new InputStreamReader(source);

Result response= gson.fromJson(reader, Result.class);

我知道这适用于子数据,因为我可以查询并获取单个条目并很容易地解析它,但是为数组中的每个值给出的随机整数值呢?(即 30655845 和 2868874)

I know this works on the sub-data as I can query and get a single entry and parse that quite easily, but what about the random integer values given for each value in the array? (ie the 30655845 and 2868874)

有什么帮助吗?

推荐答案

根据 GSON 文档 您可以执行以下操作:

According to GSON documentation you can do things like:

Type mapType = new TypeToken<Map<Integer, Result> >() {}.getType(); // define generic type
Map<Integer, Result> result= gson.fromJson(new InputStreamReader(source), mapType);

或者您可以尝试为您的班级编写自定义序列化程序.

Or you can try to write custom serializer for your class.

免责声明:我也没有使用 GSon 的经验,但使用其他框架(如 Jackson).

Disclaimer: I too, have no experience with GSon but with other frameworks like Jackson.

这篇关于如何使用 GSON 解析动态 JSON 字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆