读取JSON作为对象列表-Jackson

问题描述

我有一个如下的Json字符串

{
  "EngineData": [
    {
      "make": "Toyota","transmission": "Manual","fuel": "Petrol"
    },{
      "make": "GMC","transmission": "Auto",{
      "make": "Honda","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>

我写了以下内容,但它没有将String读取到EngineData列表中

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

不确定这有什么问题

解决方法

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

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

它将与以下JSON一起使用:

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

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

,

对象无法映射到列表,

请参阅此以映射给定的json:

public class EngineDataList {
   @JsonProperty("EngineData")
   List<EngineData> EngineData;
}

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