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

Java 使用Jackson将JSON数据读入数组/列表,java,arrays,json,jackson,Java,Arrays,Json,Jackson,我已经看到并阅读了一些关于这个问题的问题,但似乎没有一个能解决我的问题。我很可能犯了一个(或两个)轻微但严重的错误,但我没有看到它们 我的JSON看起来是这样的(真实的示例要复杂得多,但这就是我将其缩减为的内容): 我以前读过的代码是: StormData.java: public class StormData { @JsonCreator StormData ( String atcID, String name ) { this.atcID = atcID; this.n

我已经看到并阅读了一些关于这个问题的问题,但似乎没有一个能解决我的问题。我很可能犯了一个(或两个)轻微但严重的错误,但我没有看到它们

我的JSON看起来是这样的(真实的示例要复杂得多,但这就是我将其缩减为的内容):

我以前读过的代码是:

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

那么我错过了什么?TIA.

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

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

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

尝试创建默认构造函数。如果要使用单参数构造函数,请使用
@JsonCreator
注释。在您的示例中,Jackson尝试创建对象,然后使用setter方法来设置属性。好的,如果我将@JsonCreator添加到构造函数中(请参阅上面原始(已编辑)文章中的编辑),那么它就可以工作了!但如果随后添加第二个字段“name”(请参见上面的编辑),则会出现一个新错误:type
StormData
的类型定义无效:参数#0没有属性名称,不可注入:不能用作创建者[StormData的构造函数,注释:尝试使用@JsonProperty。示例:感谢您的建议。但首先,JsonProperty生成一个错误“此位置不允许”。如果忽略此错误,则返回到“无法构造
StormData的实例”
(没有创建者…”您需要在构造函数上同时使用注释:
@JsonCreator
,在每个参数上使用注释:
@JsonProperty
。请参阅我上面提供的官方文档的链接。对我有用。
Cannot construct instance of `StormData` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
@JsonCreator
StormData (@JsonProperty("atcID") String atcID, @JsonProperty("name") String name) {
    this.atcID = atcID;
    this.name = name;
}