JSON解析为我提供了NULL数据

时间:2017-06-14 11:57:35

标签: java json jackson

我正在使用Jackson库来尝试解析我的JSON文件。我的JSON实际上是JSON Objects ARRAY

JSON ARRAY:

[
 {
   "Id" : "0",
  "name" : "John"
},
{
   "Id" : "1",
   "name" : "Doe"
}
]

POJO CLASS:

@JsonIgnoreProperties(ignoreUnknown = true)
public class QuestData {
    private String Id;

    private String name;

    public String getId() {
        return Id;
    }

   public String getName() {
       return name;
   }
}

PARSING JSON:

  private void parseJSON(File jsonFile) {
        try {
            byte[] jsonData = Files.readAllBytes(jsonFile.toPath());
            System.out.println(new String(jsonData));

            ObjectMapper mapper = new ObjectMapper();

            List<QuestData> questDataList = mapper.readValue(jsonData, mapper.getTypeFactory().constructCollectionType(List.class, QuestData.class));
            System.out.println("Read values: " + questDataList.get(0).getId());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

我的第一个print语句打印出正确的Json数据(如String)。

但接下来的印刷声明说NULL。我甚至试图在整个列表中找到它,看看是否有一些不是空的东西,但没有运气。

我不知道我在这里做错了什么。

2 个答案:

答案 0 :(得分:2)

杰克逊默认使用setter方法设置字段。所以添加如下的设置者:

@JsonProperty("Id")  // otherwise Jackson expects id for setId
public void setId(String id) {
    Id = id;
}

或者,告诉Jackson使用此配置查找字段:

mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);

在这种情况下,杰克逊会将班级Id中的字段名称与JSON Id

中的字段名称相匹配

答案 1 :(得分:0)

只需将@JsonProperty注释添加到Id类的QuestData媒体资源中:

@JsonIgnoreProperties(ignoreUnknown = true)
public class QuestData {

    @JsonProperty("Id")
    private String Id;

    private String name;

    public String getId() {
        return Id;
    }

   public String getName() {
       return name;
   }
}