2010-06-29 4 views
12

Je voudrais sérialiser un HashMap comme une chaîne à travers le processeur Jackson JSON. Par exemple:Comment éviter la sérialisation des valeurs nulles dans HashMap?

String strMap = getMapper().writeValueAsString(myHashMap); 
result output -> {"r_id":6,"a_am":null,"smb":"Submit","a_li":null,"l_id":878,"pos":[1345,1346,1347]} 

Je ne sais pas comment désactiver la sérialisation des valeurs NULL pour carte. Il fonctionne très bien seulement pour POJO si configurer Jackson comme ceci:

mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL); 

Répondre

19

Pour ce que ça vaut, Jackson 1.6 aura ceci:

objectMapper.configure(SerializationConfig.WRITE_NULL_MAP_VALUES, false); 

qui ne fait ce que vous voulez. La méthode existante ne fonctionne que pour les beans et n'est pas modifiée pour garantir une rétrocompatibilité maximale.

EDIT: comme indiqué dans les commentaires, ceci est pour Jackson 1.x; Jackson 2.xa correspondant SerializationFeature

+0

Et 1.6 vient d'être publié il y a quelques jours. – StaxMan

+2

Maintenant, il ressemble à 'mapper.configure (SerializationFeature.WRITE_NULL_MAP_VALUES, false)' –

3

Ou vous pouvez annoter votre haricot avec @JsonWriteNullProperties (faux), qui

+1

À partir de 1.?, Utilisez @JsonInclude (value = Include.NON_NULL) –

+4

Il semble que @JsonInclude (value = Include.NON_NULL) soit obsolète. Donc, pour les beans, ajoutez '@JsonSerialize (include = Inclusion.NON_NULL)' à la classe à sérialiser. Voir aussi http://wiki.fasterxml.com/JacksonFAQ. –

+0

Où voyez-vous que @JsonInclude est obsolète? Il est explicitement listé à https://github.com/FasterXML/jackson-annotations/wiki/JacksonAnnotations –

11

Voici la dernière annotation pour ignorer les champs NULL

@JsonSerialize (include = JsonSerialize. Inclusion.NON_NULL)

7

Utilisation de Jackson 2.1.2 J'ai trouvé que je peux annoter la classe avec @JsonInclude(Include.NON_NULL) afin que les valeurs null ne soient pas du tout sérialisées.

+0

Quelle est la différence entre ceci et @JsonSerialize? –

1

avec la dernière version Jackson, sur la ObjectMapper, vous pouvez faire:

mapper.setSerializationInclusion (JsonInclude.Include.NON_NULL);

Questions connexes