java - 使用 Jackson 将 JSON 数据读取到数组/列表中

标签 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。

最佳答案

您需要使用两个注释:构造函数上的 @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/

相关文章:

arrays - 如何使用 ExSwift Array.toDictionary?

android - 预期为 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ - Retrofit 2 Android 中为 BEGIN_OBJECT

javascript - 尝试使用 AJAX 加载 json 数据时重新加载 javascript 函数时出现 Jquery 错误

java - Tomcat 没有关闭

javascript - JS 关联数组 : add new pair

java - SLF4J 按标记过滤日志消息

arrays - 展开可选值时发现 nil(音乐库)

python - 将嵌套的 JSON 字符串展平到 Google BigQuery 中的不同列

Java 8编译器插件: How to add extending expression to a generated class?

java - 空数组错误