gpt4 book ai didi

java - Gson反序列化嵌入成员的json

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

我有以下示例 JSON:

{
"birds":[
{
"id":"SAMPLEID",
"isTest":true,
"externalId":{
"Main":[
"123ABC"
],
"Sub":[
"456"
]
},
"dinos":[

],
"rhinos":[
{
"id":"SUPER100ID",
"isTest":true,
"externalId":{
"famousId":[
"23|45"
]
},
"dinos":[

],
"pelicans":[
{
"id":"D4CLIK",
"isTest":true,
"bird":null,
"crazyArray":[

]
},
{
"id":"DID123",
"type":"B",
"name":"TONIE",
"isTest":true,
"bird":null,
"subspecies":[

]
}
]
}
]
}
],
"metaData":{
"count":1
}
}

我想使用 GSON 反序列化这个 JSON 字符串并仅获取“knownId”成员的值。

我已经查看了其他答案,看来我绝对需要为此创建类。

是否可以使用 JsonParser、JsonElement、JsonArray 等在不映射 POJO 的情况下反序列化它?我尝试了几种排列方式,但没有成功。

我也尝试过以下代码,但它也没有按预期工作:

JsonObject o = new JsonParser().parse(jsonResponseString).getAsJsonObject();

Gson gson = new Gson();
enterprises ent = new enterprises();
ent = gson.fromJson(o, enterprises.class);


@Getter
@Setter
class birds {
@JsonProperty("rhinos")
List<Rhino> rhinos = new ArrayList<Rhino>();
}

@Getter
@Setter
class Rhino {
@JsonProperty("externalId")
ExternalId externalId;
}

@Getter
@Setter
@JsonPropertyOrder({
"famousId"
})
class ExternalId {
@JsonProperty("famousId")
List<String> famousId = new ArrayList<String>();
}

不幸的是,这也不起作用,所以我猜想有一个由两部分组成的问题...是否可以简单地反序列化并获取我想要的knownId的字符串值,以及我当前的类结构有什么不正确?

最佳答案

你已经快完成了。我为您的 json 结构添加了一个根类(Enterprises)。

class Enterprises {
List<Birds> birds;
}

class Birds {
List<Rhino> rhinos;
}

class Rhino {
ExternalId externalId;
}

class ExternalId {
List<String> famousId;
}

运行以下代码:

JsonObject o = new JsonParser().parse(jsonResponseString).getAsJsonObject();
Gson gson = new Gson();

Enterprises enterprises = gson.fromJson(o, Enterprises.class);
System.out.println("famousId:" + enterprises.birds.get(0).rhinos.get(0).externalId.famousId.get(0));

输出:

famousId:23|45

或者如果您不想使用 pojo 类:

JsonObject o = new JsonParser().parse(jsonResponseString).getAsJsonObject();
JsonArray birdsJsonArray = (JsonArray) o.get("birds");
JsonArray rhinosJsonArray = (JsonArray)((JsonObject)(birdsJsonArray.get(0))).get("rhinos");
JsonObject externalIdJsonObject = (JsonObject)((JsonObject)(rhinosJsonArray.get(0))).get("externalId");
JsonArray famousIdJsonArray = (JsonArray)externalIdJsonObject.get("famousId");

System.out.println("famousId:" + famousIdJsonArray.get(0));

输出:

famousId:23|45

关于java - Gson反序列化嵌入成员的json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768137/

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