1

Jackson が json ファイルを poco に逆シリアル化するという誤解に問題があります。これは私のコードです:

        JsonParser jp = new JsonFactory().createJsonParser(new File(pathFile)); 
        ObjectMapper objectMapper = new ObjectMapper();

        MappingIterator<AnimalBean> animalsss = objectMapper.readValues(jp, AnimalBean.class);
        while (animalsss.hasNext())
        {
            AnimalBean abba = animalsss.next();
            System.out.println(abba.getNom());
        }

私の POCO は AnimalBean という名前です:

public class AnimalBean 
{   
 private String id;
private String nom;
private String nom_scientifique;
private String classe;
private String ordre;
private String famille; 
private String details_zone;    
private String poids;
private String duree_gestation;
private String nb_gestation;
private String longevite;
private String description;
private String images;
   ... + all getter/setter

そして私のJSONファイル:

{
"zoo": {
    "animaux": {
        "animal": [{
            "id": 1,
            "nom": "test",
            "nom_scientifique": "test2",
            "classe": 1,
            "ordre": 3,
            "famille": 4,
            "details_zone": "Zones",
            "poids": "80",
            "duree_gestation": "11",
            "nb_gestation": "1",
            "longevite": "25 ans",
            "description": "texte de description"
                }]
            }
    }

}

コードを実行すると、次のエラーが発生します: フィールド "zoo" (クラス AnimalBean) を認識できません。無視できるとマークされていません。問題は、私のjsonファイルが動物によって直接ではなく始まっていることだとわかっていますが、それは私のものではないため、変更できません。私はすでに objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); を入れようとしました。しかし、それは何かを変えます。

誰かが私を助けることができますか?

4

2 に答える 2

1

いくつかのラッパー クラスを使用して JSON に一致させてみませんか?

お気に入り:

public class Wrapper {
  public Zoo zoo;
}
public class Zoo {
  public Animals animaux;
}
public class Animals {
  public Animal[] animal;
}

次にバインドします。

Wrapper w = mapper.readValue(json, Wrapper.class);
for (Animal animal : w.zoo.animaux.animal) {
   // process!
}
于 2012-12-02T07:21:26.890 に答える
0

あなたの状況/コードを正確に再現できないため、これは完全にテストされていないコードです。基本的に、値を文字列として取得し、ラップを解除してから、別の JsonParser を作成しようとします。

ObjectMapper objectMapper = new ObjectMapper();
JsonParser jp = new JsonFactory().createJsonParser(new File(pathFile)); 
String json = jp.getText();
JsonNode node = objectMapper.readTree(json).get("Animal");
JsonParser jp2 = new JsonFactory().createJsonParser(node.getTextValue());

MappingIterator<AnimalBean> animalsss = objectMapper.readValues(jp2, AnimalBean.class);
while (animalsss.hasNext())
{
    AnimalBean abba = animalsss.next();
    System.out.println(abba.getNom());
}
于 2012-12-02T00:13:39.130 に答える