我已经看到并阅读了有关此主题的几个问题,但似乎没有一个能解决我的问题。我很可能犯了一(或两个)小但严重的错误,但我没有看到它们。
我的 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。
最佳答案
您需要使用两个注释:构造函数上的 @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 .
关于java - 使用 Jackson 将 JSON 数据读取到数组/列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49782467/