Java 如何获取主类中的嵌套数组值-JSON到POJO
我有这样一个JSON:Java 如何获取主类中的嵌套数组值-JSON到POJO,java,json,jackson,pojo,Java,Json,Jackson,Pojo,我有这样一个JSON: { "types":[ { "slot":1, "type":{ "name":"grass", "url":"https://pokeapi.co/api/v2/type/12/" } },
{
"types":[
{
"slot":1,
"type":{
"name":"grass",
"url":"https://pokeapi.co/api/v2/type/12/"
}
},
{
"slot":2,
"type":{
"name":"poison",
"url":"https://pokeapi.co/api/v2/type/4/"
}
}
]
}
public class MainClass {
private List<String> types;
}
我只需要类型的名称,所以我想要这样的名称:
{
"types":[
{
"slot":1,
"type":{
"name":"grass",
"url":"https://pokeapi.co/api/v2/type/12/"
}
},
{
"slot":2,
"type":{
"name":"poison",
"url":"https://pokeapi.co/api/v2/type/4/"
}
}
]
}
public class MainClass {
private List<String> types;
}
public类MainClass{
私有列表类型;
}
我希望避免创建嵌套类。如何获得此结果?最简单的方法是将JSON转换为映射并从中检索列表,然后从每个元素中获取映射并按键类型获取值。这是你的电话号码。剩下的应该是琐碎的使用Jackson,您可以:
ArrayNode types = objectMapper.readTree(jsonStr).withArray("types");
List<String> typeNames = IntStream.range(0, types.size())
.mapToObj(types::get)
.map(json -> json.get("type")
.get("name")
.asText())
.collect(Collectors.toList());
JSONArray jsonArray = new JSONObject(jsonStr).getJSONArray("types");
List<String> typeNames = IntStream.range(0, jsonArray.length())
.mapToObj(jsonArray::getJSONObject)
.map(json -> json.getJSONObject("type")
.getString("name"))
.collect(Collectors.toList());
具体来说,为什么要避免创建更多类?“类型”是口袋妖怪类的一个字段。我想轻松地遍历特定口袋妖怪拥有的类型。您还没有解释为什么要避免创建
列表
。因为这样我就可以使用类型。contains(name)
,要检查特定的口袋妖怪是否具有给定的类型,不需要遍历所有类型列表,并检查每个type.name是否等于给定的类型。也许此时您应该使用JsonPath(尽管我不会再三考虑types.stream().filter(t->name.equals(t.getName()).findFirst()
,或者更干净的types.find>){it.name==name}
在Groovy中)。