Java 如何获取主类中的嵌套数组值-JSON到POJO

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/" } },

我有这样一个JSON:

{
   "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中)。