gpt4 book ai didi

java - 如何使用 GSON 将 JSON 数组序列化为 Java 对象?

转载 作者:行者123 更新时间:2023-12-02 05:30:00 26 4
gpt4 key购买 nike

我有一个需要解析的以下 JSON 文档。我只显示 files 数组中的两个对象。一般来说,我会有超过 500 个对象。

{  
"files":[
{
"name":"/testing01/partition_395.shard",
"max_chain_entries":20,
"partition":"297, 298",
"new_users":"123, 345, 12356"
},
{
"name":"/testing02/partition_791.shard",
"max_chain_entries":20,
"partition":"693, 694, 695",
"new_users":"3345, 6678, 34568"
}
]
}

这是我的上述对象的 DataModel 类 -

public class JsonResponseTest {
private String name;
private String max_chain_entries;
private String partition;
private String new_users;

// getters here
}

如果 name 标签具有 /testing01,我需要提取所有 new_users 并将其填充到 HashSet 中 java 。我正在使用 GSON 进行 JSON 序列化。

private static RestTemplate restTemplate = new RestTemplate();
private static final Gson gson = new Gson();

public static void main(String[] args) {

String jsonResponse = restTemplate.getForObject(
"some_url", String.class);

Type collectionType = new TypeToken<List<JsonResponseTest>>() {}.getType();
List<JsonResponseTest> navigation = gson.fromJson(jsonResponse, collectionType);

System.out.println(navigation);
}

但是上面的代码给我的错误消息是 -

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

我在这里做错了什么吗?

最佳答案

问题是您首先有一个 JSON 对象,然后是 JSON 数组,但您正在反序列化,认为它是 JSON 数组。尝试下面的代码 -

String jsonResponse = restTemplate.getForObject("some_url", String.class);

Type collectionType = new TypeToken<List<JsonResponseTest>>() {}.getType();

JsonObject json = new JsonParser().parse(jsonResponse).getAsJsonObject();
JsonArray jarr = json.getAsJsonObject().getAsJsonArray("files");

List<JsonResponseTest> navigation = gson.fromJson(jarr, collectionType);
System.out.println(navigation);

关于java - 如何使用 GSON 将 JSON 数组序列化为 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25653017/

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