首页 > 解决方案 > 将 JSON 读取为对象列表 - Jackson

问题描述

我有一个如下的 Json 字符串

{
  "EngineData": [
    {
      "make": "Toyota",
      "transmission": "Manual",
      "fuel": "Petrol"
    },
    {
      "make": "GMC",
      "transmission": "Auto",
      "fuel": "Petrol"
    },
    {
      "make": "Honda",
      "transmission": "Manual",
      "fuel": "Petrol"
    }
  ]
}

我有如下定义的 POJO

@JsonIgnoreProperties(ignoreUnknown = true)
public class EngineData implements Serializable {
    @JsonProperty("make")
    private String make;
    @JsonProperty("transmission")
    private String transmission;
    @JsonProperty("fuel")
    private String fuel;

    //getters and setters
    
}

我想读它List<EngineData>

我写了以下内容,但它没有将字符串读取到 EngineData 列表

List<EngineData> engineDataList =null;
ObjectMapper mapper = new ObjectMapper();
engineDataList = mapper.readValue(myJsonString, new TypeReference<List<EngineData>>() {
            });

不知道这有什么问题

标签: javajsonjackson

解决方案


您的 JSON 对应于一个对象,例如:

class CustomObject {
   List<EngineData> EngineData;
   //...
}

它将与下面的 JSON 一起使用:

[
    {
      "make": "Toyota",
      "transmission": "Manual",
      "fuel": "Petrol"
    },
    {
      "make": "GMC",
      "transmission": "Auto",
      "fuel": "Petrol"
    },
    {
      "make": "Honda",
      "transmission": "Manual",
      "fuel": "Petrol"
    }
  ]

如果您被迫使用此 JSON,我认为您将需要编写自定义反序列化器。参看。https://www.baeldung.com/jackson-deserialization


推荐阅读