gpt4 book ai didi

java - 解析 JSON 对象时 Gson 解析错误

转载 作者:行者123 更新时间:2023-12-01 18:17:26 25 4
gpt4 key购买 nike

我正在尝试解析此 JSON:

{
"Aatrox": {
"version": "5.2.1",
"id": "Aatrox",
"key": "266",
"name": "Aatrox",
"title": "the Darkin Blade"
},
"Ahri": {
"version": "5.2.1",
"id": "Ahri",
"key": "103",
"name": "Ahri",
"title": "the Nine-Tailed Fox"
},
"Akali": {
"version": "5.2.1",
"id": "Akali",
"key": "84",
"name": "Akali",
"title": "the Fist of Shadow"
},
....
}

正如您所看到的,所有元素都具有相同的属性,因此我想将它们解析为元素列表,这是我正在使用的类:

public class CampeonBO {

private String version;
private String id;
private String key;
private String name;
private String title;

//Getters and Setters
}

这就是我尝试用 Gson 解析它的方式

Type type = new TypeToken<List<CampeonBO>>(){}.getType();
List<CampeonBO> campeones = gson.fromJson(bufferedReader, type);

我收到错误:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

这显然是因为我的 JSON 中没有数组,我有 3 个属性“Aatrox、Ahri、Akali”,但它们都具有相同的属性,那么我如何使用 Gson 将它们解析为列表?

最佳答案

您告诉 Gson 将数据解析为 List,这意味着 Gson 期望解析 JSON 数组:

JSON Array format

但是您尝试解析的 JSON 实际上是一个 JSON 对象:

JSON Object format

一般来说,Gson 解析 JSON 对象的方法是将其解析为专用的 Java 类型,就像您使用 CampeonBO 所做的那样。然而,JSON 对象在概念上也是一种映射,因此,如果您尝试使用任意键和所有值的类型相同。

一旦您有了 map ,您就可以调用 Map.values()获取 map 值的Collection(如果需要,您可以将其放入List中)。

参见How can I convert JSON to a HashMap using Gson?举一些例子。

图片来自http://json.org/ .

关于java - 解析 JSON 对象时 Gson 解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com