gpt4 book ai didi

java - 使用 Gson 解析带对象的 JSON 但需要排除数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:14 25 4
gpt4 key购买 nike

我需要解析一个包含对象的 JSON 字符串,但 JSON 中也可能有我不需要的数组,而且它目前正在崩溃:

com.google.gson.JsonSyntaxException: 
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY

如果我从 JSON 中删除所有数组,使用以下代码用我的 POJO 解析 JSON 就可以很好地工作:

Type type = new TypeToken<Map<String, UsersPOJO>>(){}.getType();
Map<String, UsersPOJO> myUsers = gson.fromJson(JSONString, type);

但是只要 JSON 中有数组,我就无法解析。我不需要,也不想解析数组,但如果有必要,解析数组然后丢弃结果就可以了。

我如何使用 Gson 完成此操作?或者与此相关的任何其他 Java JSON 库。 Gson 不是必需的。

这是我要解析的 JSON 示例:

{
"1002001":{
"level":2,
"name":"CaptKrunch",
"uid":1002001,
"user":{
"age":21,
"city":"None",
"country":"United States",
"creation":1269969663
},
"meta":{
"score":1762,
"rank":78
}
},
"1003001":{
"level":11,
"name":"LtRaine",
"uid":1003001,
"user":{
"age":35,
"city":"LA",
"country":"United States",
"creation":1269369663
},
"meta":{
"score":11562,
"rank":11
}
},
"tags_1002001": [
"conqurer",
"almighty"
]
}

最佳答案

如果将 JSON 字符串解析为 JsonElement 并迭代所有元素,则可以跳过数组:

Gson gson = new Gson();

//Type type = new TypeToken<Map<String, UsersPOJO>>(){}.getType();
//Map<String, UsersPOJO> myUsers = gson.fromJson(jsonString, type);

JsonParser parser = new JsonParser();
JsonElement topElement = parser.parse(jsonString);
Map<String, UsersPOJO> myUsers = new HashMap<>();
for (Map.Entry<String, JsonElement> entry : topElement.getAsJsonObject().entrySet()) {
if (entry.getValue().isJsonArray()) {
//skip or process array
} else {
myUsers.put(entry.getKey(), gson.fromJson(entry.getValue(), UsersPOJO.class));
}
}

关于java - 使用 Gson 解析带对象的 JSON 但需要排除数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36479351/

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