gpt4 book ai didi

java - 安卓 : parsing large json response

转载 作者:行者123 更新时间:2023-11-30 11:42:41 25 4
gpt4 key购买 nike

我正在使用谷歌 gson-2.2.1用于解析 JSON 大响应的库。

我必须解析结构可能不同的 JSON 响应。

第一种情况,当响应包含多个团队时:

 "Details":{

"Role":"abc",
"Team":[
{
"active":"yes",
"primary":"yes",
"content":"abc"
},
{
"active":"yes",
"primary":"yes",
"content":"xyz"
}
],

第二种情况,只有一个团队通过时:

"Details":{

"Role":"abc",
"Team":
{
"active":"yes",
"primary":"yes",
"content":"abc"
}
}

有我用于解析的基类:

class Details {
public String Role;
public ArrayList<PlayerTeams> Team = new ArrayList<PlayerTeams>();
PlayerTeams Team; // when JsonObject
}

class PlayerTeams {
public String active;
public String primary;
public String content;
}

问题是我不能使用ArrayList<PlayerTeams>当我只有其中一个并且它作为 JsonObject 返回时。

Gson可以识别JSON响应的静态格式。我可以通过检查“团队”键是否是 JsonArray 的实例来动态跟踪完整响应或 JsonObject但如果有更好的解决方案,那就太好了。

编辑:如果我的 react 更动态..

"Details":{

"Role":"abc",
"Team":
{
"active":"yes",
"primary":"yes",
"content":"abc"
"Test":
{
"key1":"value1",
"key2":"value2",
"key3":"value3"
}
}
}

在我编辑的问题中,我遇到了问题,而我的回答更加动态.. TeamTest可以是JsonArrayJsonObject .. 这真的很烦我,因为有时Test当数据较多时对象可能是数组,当数据单一时可能是对象,当没有数据时可能是字符串。响应不一致。

最佳答案

你需要一个类型适配器。该适配器将能够区分即将到来的格式,并使用正确的值实例化正确的对象。

您可以通过以下方式做到这一点:

  1. 通过创建一个实现 JsonSerializer<List<Team>>, JsonDeserializer<List<Team>> 的类来实现您自己的类型适配器, 当然 JsonSerializer如果您也需要在这方面对其进行序列化,则只需要它。
  2. 注册类型适配器给你GsonBuilder喜欢:new GsonBuilder().registerTypeAdapter(new TypeToken<List<Team>>() {}.getType(), new CoupleAdapter()).create()

反序列化方法可能如下所示:

public List<Team> deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
throws com.google.gson.JsonParseException {
if (json.isJsonObject()) {
return Collections.singleton(context.deserialize(json, Team.class));
} else {
return context.deserialize(json, typeOfT);
}
}

关于java - 安卓 : parsing large json response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11592071/

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