Java Gson反序列化嵌入成员的json
我有以下JSON示例:Java Gson反序列化嵌入成员的json,java,json,serialization,gson,deserialization,Java,Json,Serialization,Gson,Deserialization,我有以下JSON示例: { "birds":[ { "id":"SAMPLEID", "isTest":true, "externalId":{ "Main":[ "123ABC" ], "Sub":[ "456" ] }, "dinos":[ ], "rhinos":[ {
{
"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字符串,并只获取“famousId”成员的值
我已经看过了其他答案,似乎我绝对需要为此创建类
是否可以使用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>();
}
JsonObject o=newjsonparser().parse(jsonResponseString.getAsJsonObject();
Gson Gson=新的Gson();
enterprises ent=新企业();
ent=gson.fromJson(o,enterprises.class);
@吸气剂
@塞特
鸟类分类{
@JsonProperty(“rhinos”)
List rhinos=new ArrayList();
}
@吸气剂
@塞特
犀牛类{
@JsonProperty(“externalId”)
外化外化;
}
@吸气剂
@塞特
@JsonPropertyOrder({
“著名的”
})
外部类{
@JsonProperty(“famousId”)
List famousId=new ArrayList();
}
不幸的是,这也不起作用,所以我想有一个分为两部分的问题……是否可以简单地反序列化并获取我想要的famousId的字符串值,以及我当前的类结构有什么不正确之处?您几乎已经完成了。我为json结构添加了一个根类(
Enterprises
)
class Enterprises {
List<Birds> birds;
}
class Birds {
List<Rhino> rhinos;
}
class Rhino {
ExternalId externalId;
}
class ExternalId {
List<String> famousId;
}
输出:
famousId:23|45
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
famousId:23|45