2010-06-29 11 views
12

Ich möchte eine HashMap als String durch den Jackson JSON-Prozessor serialisieren. Zum Beispiel:Wie vermeidet man Serialisierung von Nullwerten 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]} 

Ich weiß nicht, wie Nullwert Serialisierung für Karte deaktivieren. Es funktioniert nur für POJO in Ordnung, wenn die Jackson wie folgt konfiguriert werden:

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

Antwort

19

Für das, was es wert ist, Jackson 1.6 wird sich dies:

objectMapper.configure(SerializationConfig.WRITE_NULL_MAP_VALUES, false); 

das tut, was Sie wollen. Die vorhandene Methode funktioniert nur für Beans und wird nicht geändert, um maximale Rückwärtskompatibilität zu gewährleisten.

EDIT: wie Notiz auf Kommentare, dies ist für Jackson 1.x; Jackson 2.x hat zusammenpassende SerializationFeature

+0

Und 1.6 wurde gerade vor ein paar Tagen veröffentlicht. – StaxMan

+2

Nun sieht es wie folgt aus: 'mapper.configure (SerializationFeature.WRITE_NULL_MAP_VALUES, false)' –

3

Oder Sie können Ihre Bohne mit @JsonWriteNullProperties (false) mit Anmerkungen versehen, die wird

+1

Ab 1.?, Verwenden Sie @JsonInclude (value = Include.NON_NULL) –

+4

Es scheint, dass @JsonInclude (value = Include.NON_NULL) veraltet ist. Also fügen Sie für Beans '@JsonSerialize (include = Inclusion.NON_NULL)' zu der Klasse hinzu, die serialisiert werden soll. Siehe auch http://wiki.fasterxml.com/JacksonFAQ. –

+0

Wo sehen Sie, dass @JsonInclude veraltet ist? Es ist explizit aufgeführt unter https://github.com/FasterXML/jackson-annotations/wiki/JacksonAnnotations –

11

Hier ist die neueste Anmerkung für die NULL-Felder ignoriert

@JsonSerialize (include = JsonSerialize. Inclusion.NON_NULL)

7

Verwendung von Jackson 2.1.2 Ich habe festgestellt, dass ich die Klasse mit @JsonInclude(Include.NON_NULL) annotieren kann, so dass Nullen überhaupt nicht serialisiert werden.

+0

Was ist der Unterschied zwischen diesem und @JsonSerialize? –

1

Mit der neuesten Version Jackson, auf der ObjectMapper, können Sie tun:

mapper.setSerializationInclusion (JsonInclude.Include.NON_NULL);

Verwandte Themen