2017-06-14 13 views
1

私はJSONファイルを試して解析するためにJacksonライブラリを使用しています。私のJSONは、実際にJSONObjectsARRAYです:JSON解析でNULLデータが返される

JSON ARRAY:

[ 
{ 
    "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(); 
     } 
    } 

私の最初のprintステートメントは正しいJsonデータを(Stringとして)返します。

しかし、次の印刷文は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メソッドによって。だから、のようなセッターを追加します。ジャクソンは1で持つクラスId内のフィールドの名前と一致します

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

この場合:代わり

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

、この設定を持つフィールドを探すためにジャクソンを伝えますJSON Id

+0

これはうまくいった!ありがとう! – AndroidDev101

0

ちょうどあなたのQuestDataクラスのIdプロパティに@JsonProperty注釈を追加します。

@JsonIgnoreProperties(ignoreUnknown = true) 
public class QuestData { 

    @JsonProperty("Id") 
    private String Id; 

    private String name; 

    public String getId() { 
     return Id; 
    } 

    public String getName() { 
     return name; 
    } 
} 
関連する問題