2010-06-29 14 views
12

Me gustaría serializar un HashMap como una cadena a través del procesador Jackson JSON. Por ejemplo:Cómo evitar la serialización de valores nulos en 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]} 

No sé cómo desactivar los valores nulos serialización de Mapa. Funciona bien sólo para POJO si configurar los Jackson como esto:

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

Respuesta

19

Por lo que vale la pena, Jackson 1.6 tendrá la siguiente:

objectMapper.configure(SerializationConfig.WRITE_NULL_MAP_VALUES, false); 

el que hace lo que quiere. El método existente solo funciona para beans, y no se está modificando para garantizar la máxima compatibilidad con versiones anteriores.

EDITAR: según la nota en los comentarios, esto es para Jackson 1.x; Jackson ha 2.x juego SerializationFeature

+0

Y 1.6 fue lanzado hace un par de días también. – StaxMan

+2

Ahora parece 'mapper.configure (SerializationFeature.WRITE_NULL_MAP_VALUES, false)' –

3

o puede hacer anotaciones en el bean con @JsonWriteNullProperties (falsos), que se

+1

A partir del 1.?, Use @JsonInclude (value = Include.NON_NULL) –

+4

Parece que @JsonInclude (value = Include.NON_NULL) está en desuso. Entonces, para los beans agregue '@JsonSerialize (include = Inclusion.NON_NULL)' a la clase que se serializará. También vea http://wiki.fasterxml.com/JacksonFAQ. –

+0

¿Dónde ves que @JsonInclude está en desuso? Está explícitamente listado en https://github.com/FasterXML/jackson-annotations/wiki/JacksonAnnotations –

11

Aquí es la última anotación para ignorar los campos NULL

@JsonSerialize (incluya = JsonSerialize. Inclusion.NON_NULL)

7

Usando Jackson 2.1.2 He encontrado que puedo anotar la clase con @JsonInclude(Include.NON_NULL) para que los valores nulos no se serialicen en absoluto.

+0

¿Cuál es la diferencia entre esto y con @JsonSerialize? –

1

Con la última versión de Jackson, en el ObjectMapper, que puede hacer:

mapper.setSerializationInclusion (JsonInclude.Include.NON_NULL);

Cuestiones relacionadas