java - 如何使用 GSON 解析动态 JSON 字段?

标签 java json api gson

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

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

{

-
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
}
}

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

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 来解析它:

Gson gson = new Gson();

Reader reader = new InputStreamReader(source);

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

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

有什么帮助吗?

最佳答案

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

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

或者你可以尝试写custom serializer为你的类(class)。

免责声明:我也没有使用 GSon 的经验,但使用过其他框架,例如 Jackson。

关于java - 如何使用 GSON 解析动态 JSON 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796948/

相关文章:

java - 每当线程达到稳定状态时就发出信号终止它

Java从函数中去除零

python - JSONField Django 模板不显示我去了什么

javascript - Json数组获取第一个数据

javascript - Google Calendar API 和 JS Promise

javascript - 使用网络音频 API 播放多个声音时如何消除噪音?

java - 接受输入时无休止的java循环

java - 什么是NullPointerException,我该如何解决?

ios - Swift 3 中对象的序列化和反序列化

c# - 部署到 Azure 后 API 连接字符串不起作用