2010-12-10 14 views
6

Mam następujący JSON:Jak mogę serializować ten JSON przy użyciu adnotacji Jacksona?

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

Napisałem POJO następująco:

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 
} 

To oczywiście nie powiedzie się, ponieważ moje pole json "pola" jest HashMap, a nie lista.
Moje pytanie brzmi: czy istnieje "magiczna" adnotacja, która może sprawić, że Jackson rozpoznaje klucze mapy jako nazwy właściwości pojo i przypisze wartości mapy do wartości właściwości pojo?

PS: I naprawdę nie chcę mieć moje pola obiektu jako ...

private Map<String, String> fields; 

... bo w moim świecie rzeczywistym json Mam złożonych obiektów w wartościach map, a nie tylko struny ...

Dzięki ;-)

Philippe

+0

Również, gdy próbuję serializować te mapy, otrzymuję: Błąd I/O: Nie można deserializować wystąpienia java.lang.String z tokenu START_OBJECT – Philippe

Odpowiedz

12

Ok, o to JSON, byś tylko lekko zmodyfikować przykład, jak:

public class MyPojo { 
    public Fields fields; 
} 

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

ponieważ struktura obiektów musi być zgodna ze strukturą JSON. Można użyć setterów i modułów pobierających zamiast pól publicznych (a nawet konstruktorów zamiast setterów lub pól), jest to najprostszy przykład.

Oryginalna klasa będzie produkować/zużywają JSON bardziej jak:

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

bo Listy map do tablic JSON.

Powiązane problemy