【问题标题】:How to get nested array values in main class - JSON to POJO如何在主类中获取嵌套数组值 - JSON to POJO
【发布时间】:2021-04-27 08:28:09
【问题描述】:

我有一个这样的 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;
}

我想避免创建嵌套类。我怎样才能得到这个结果?

【问题讨论】:

  • 为什么,特别是,您要避免创建更多类?
  • “类型”是口袋妖怪类的一个字段。我想轻松地遍历特定口袋妖怪所具有的类型。
  • 您还没有解释为什么要避免创建List&lt;Type&gt;
  • 因为这样我就可以使用types.contains(name) 来检查特定口袋妖怪是否具有给定类型,并且不需要遍历所有类型列表并检查每个 Type.name 是否等于给定类型。
  • 也许此时您应该只使用 JsonPath(尽管我不会三思而后行 types.stream().filter(t -&gt; name.equals(t.getName()).findFirst(),或者 Groovy 中更干净的 types.find { it.name == name })。

标签: java json jackson pojo


【解决方案1】:

最简单的方法是将您的 JSON 转换为 map 并从那里检索 List 并从每个元素获取 Map 并通过键类型获取值。这是link to a question on how to parse your JSON。其余的应该是微不足道的

【讨论】:

    【解决方案2】:

    使用 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());
    

    或者使用org.json,你可以这样做:

    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());
    

    两者都返回输出:

    [grass, poison]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 2016-06-15
      • 2020-01-24
      相关资源
      最近更新 更多