JSON解析给了我NULL数据

JSON解析给了我NULL数据

问题描述:

我正在使用Jackson库来试图解析我的JSON文件。我的JSON实际上是一个JSONObjects ARRAYJSON解析给了我NULL数据

JSON数组:

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

POJO类:

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

    private String name; 

    public String getId() { 
     return Id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

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

我的第一个打印语句打印正确的Json数据(作为字符串)。

但是下一个打印语句说NULL。我甚至试图在整个列表中查看是否存在非空的东西,但没有运气。

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

+1

你能提供类QuestData的代码 – Joram

+0

我认为你正在寻找:https://*.com/questions/6349421/how-to-use-jackson-to-deserialise-an-array对象,如果这不能解决你的问题,那很可能是在你的POJO QuestData中,正如@Joram所说的那样。 – sjahan

+0

@Joram新增POJO类 – AndroidDev101

杰克逊将默认使用setter方法来设置字段。所以加setter方法,如:

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

另外,告诉杰克逊去找这个配置字段:

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

在这种情况下,杰克逊将在类Id与一个在匹配字段的名称JSON Id

+0

这工作!谢谢! – AndroidDev101

@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; 
    } 
}