2017-06-14 51 views
1

我正在使用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://stackoverflow.com/questions/6349421/how-to-use-jackson-to-deserialise-an-array對象,如果這不能解決你的問題,那很可能是在你的POJO QuestData中,正如@Joram所說的那樣。 – sjahan

+0

@Joram新增POJO類 – AndroidDev101

回答

2

傑克遜將默認使用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

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