2010-12-10 16 views
6

Aşağıdaki JSON'um var:Jackson ek açıklamalarını kullanarak bu JSON'u nasıl seri hale getirebilirim?

{ 
    fields : { 
      "foo" : "foovalue", 
      "bar" : "barvalue" 
    } 
} 

Aşağıdaki gibi bir pojo yazdım:

public class MyPojo { 

    @JsonProperty("fields") 
    private List<Field> fields; 

    static class Field { 
     @JsonProperty("foo") private String foo; 
     @JsonProperty("bar") private String bar; 

     //Getters and setters for those 2 
} 

Açıkçası bu başarısız, çünkü json alanım "alanları" bir liste değil, bir hashıdır.
Sorum şu: Jackson'ın harita anahtarlarını pojo özellik adları olarak tanımasını ve harita değerlerini pojo özellik değerlerine atamasını sağlayan "sihirli" bir açıklama var mı?

PS: Alanlar nesnesini gerçekten istemiyorum ...

private Map<String, String> fields; 

... çünkü benim gerçek dünya jölesinde harita değerlerinde karmaşık nesneler var, sadece dizeler ...

Teşekkürler ;-)

Philippe

+0

Ayrıca, bu haritaları serileştirmeye çalıştığımda şunu alırım: G/Ç hatası: java.lang.String örneğini START_OBJECT jetonundan kaldıramaz – Philippe

cevap

12

Tamam, bu JSON için, sadece gibi, hafifçe örneğinizde değişiklik olacaktır:

Nesnelerin yapısının JSON yapısına hizalanması gerektiğinden,
public class MyPojo { 
    public Fields fields; 
} 

public class Fields { 
    public String foo; 
    public String bar; 
} 

. Elbette kamusal alanlar yerine setçiler ve getçiler kullanabilirsiniz (hatta setterler veya alanlar yerine kurucular bile olabilir), bu sadece en basit örnektir./Üretecektir

Orijinal sınıf JSON fazla gibi tüketmek: Listeler JSON diziler eşleme

{ 
    "fields" : [ 
    { 
     "foo" : "foovalue", 
     "bar" : "barvalue" 
    } 
    ] 
} 

çünkü.

İlgili konular