2010-06-29 13 views
12

Vorrei serializzare una HashMap come una stringa attraverso il processore Jackson JSON. Per esempio:Come evitare la serializzazione dei valori nulli in 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]} 

non so come disattivare i valori nulli serializzazione per Map. Funziona bene solo per POJO se configurare il Jackson in questo modo:

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

risposta

19

Per quel che vale, Jackson 1.6 avrà questo:

objectMapper.configure(SerializationConfig.WRITE_NULL_MAP_VALUES, false); 

che fa fare quello che vuoi. Il metodo esistente funziona solo per i bean e non viene modificato per garantire la massima compatibilità con le versioni precedenti.

MODIFICA: come da nota sui commenti, questo è per Jackson 1.x; Jackson 2.x ha corrispondenza SerializationFeature

+0

E 1.6 è stato appena rilasciato un paio di giorni fa. – StaxMan

+2

Ora sembra 'mapper.configure (SerializationFeature.WRITE_NULL_MAP_VALUES, false)' –

3

Oppure si può annotare il bean con @JsonWriteNullProperties (falsi) che sarà

+1

A partire da 1., Utilizzare @JsonInclude (valore = Include.NON_NULL) –

+4

Sembra che @JsonInclude (valore = Include.NON_NULL) sia deprecato. Quindi per i bean aggiungi '@JsonSerialize (include = Inclusion.NON_NULL)' alla classe da serializzare. Vedi anche http://wiki.fasterxml.com/JacksonFAQ. –

+0

Dove vedi che @JsonInclude è deprecato? È elencato esplicitamente su https://github.com/FasterXML/jackson-annotations/wiki/JacksonAnnotations –

11

Ecco l'ultima annotazione per aver ignorato i campi NULL

@JsonSerialize (includono = JsonSerialize. Inclusion.NON_NULL)

7

Utilizzo di Jackson 2.1.2 Ho trovato che posso annotare la classe con @JsonInclude(Include.NON_NULL) in modo che i valori null non siano affatto serializzati.

+0

Qual è la differenza tra questo e con @JsonSerialize? –

1

con l'ultima versione di Jackson, sul ObjectMapper, si può fare:

mapper.setSerializationInclusion (JsonInclude.Include.NON_NULL);

Problemi correlati