使用Jackson将JSON数据读入数组/列表

时间:2018-04-11 18:49:19

标签: java arrays json jackson

我已经看过并阅读过有关此主题的几个问题,但似乎都没有解决我的问题。我很可能会犯一个(或两个)轻微但严重的错误,但我没有看到它们。

我的JSON看起来像这样(真实的例子要复杂得多,但这就是我把它缩减到的地方):

[
  {
    "atcID": "AL011851"
  },
  {
   "atcID": "AL021851"
  }
]

我用来读它的代码是:

StormData.java:

public class StormData {

@JsonCreator
StormData ( String atcID, String name ) {
    this.atcID = atcID;
    this.name = name;
};

public String getAtcID()    {
    return atcID;
}

public void setAtcID( String atcID )    {
    this.atcID = atcID;
}

String      atcID;
String      name;

}

主档案:

byte[] jsonData = Files.readAllBytes(Paths.get(fileName));

ObjectMapper objectMapper = new ObjectMapper();

List<StormData> myObjects = objectMapper.readValue(jsonData , new TypeReference<List<StormData>>(){});

但我得到的错误是:

Cannot construct instance of `StormData` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)

那我错过了什么? TIA。

1 个答案:

答案 0 :(得分:1)

您需要在构造函数上使用两个注释:@JsonCreator,并在每个参数上使用@JsonProperty

@JsonCreator
StormData (@JsonProperty("atcID") String atcID, @JsonProperty("name") String name) {
    this.atcID = atcID;
    this.name = name;
}

请参阅the official documentation

从JDK 8开始,您还可以注册Jackson ParameterNamesModule并使用-parameters选项编译代码。 请参阅the documentation中的详细信息。