2010-12-10 35 views
6

J'ai la JSON suivante:Comment est-ce que je peux sérialiser ce JSON en utilisant des annotations de Jackson?

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

j'ai écrit un POJO comme suit:

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 
} 

Cela échoue évidemment, parce que mon champ JSON "champs" est un hashmap, et non une liste. Ma question est la suivante: y at-il une annotation "magique" qui peut faire que Jackson reconnaisse les clés de la carte comme noms de propriétés pojo, et affecte les valeurs de la carte aux valeurs de la propriété pojo?

PS: Je ne veux vraiment pas avoir mes champs objet comme ...

private Map<String, String> fields; 

... parce que dans mon JSON monde réel que j'ai des objets complexes dans les valeurs de carte, pas seulement cordes ...

Merci ;-)

Philippe

+0

Également, lorsque j'essaie de sérialiser ces cartes, j'obtiens: Erreur d'E/S: impossible de désérialiser l'instance de java.lang.String sur le jeton START_OBJECT – Philippe

Répondre

12

Ok, pour cette JSON, vous simplement modifier votre exemple un peu, comme:

public class MyPojo { 
    public Fields fields; 
} 

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

car la structure des objets doit s'aligner sur la structure de JSON. Vous pouvez utiliser des setters et getters à la place des champs publics bien sûr (et même des constructeurs au lieu de setters ou de champs), ceci est juste l'exemple le plus simple.

Votre classe d'origine produirait/JSON consomment plus comme:

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

car Carte de tableaux JSON.