2010-06-29 74 views
12

我想通过Jackson JSON处理器将一个HashMap序列化为一个字符串。 例如:如何避免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]} 

我不知道如何禁用空值序列化映射。它如果配置杰克逊这样只对POJO正常工作:

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

回答

19

对于它的价值,杰克逊1.6都会有这样的:

objectMapper.configure(SerializationConfig.WRITE_NULL_MAP_VALUES, false); 

这确实做你想做的。现有的方法仅适用于bean,并且不会更改以确保最大程度的向后兼容性。

编辑:根据评论注释,这是为杰克逊1.x;杰克逊2.X已匹配SerializationFeature

+0

1.6也刚刚发布几天前。 – StaxMan 2010-09-08 17:00:41

+2

现在看起来像'mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES,false)' – 2015-02-17 17:10:43

3

或者你可以用注释@JsonWriteNullProperties(假)你的bean这将

+1

作为1.?,使用@JsonInclude(value = Include.NON_NULL) – 2012-04-18 17:49:44

+4

似乎@JsonInclude(value = Include.NON_NULL)已被弃用。因此,对于bean,将'@JsonSerialize(include = Inclusion.NON_NULL)'添加到要序列化的类。另请参阅http://wiki.fasterxml.com/JacksonFAQ。 – 2013-01-03 10:42:27

+0

你在哪里看到@JsonInclude已弃用?它明确列在https://github.com/FasterXML/jackson-annotations/wiki/JacksonAnnotations – 2013-02-13 16:15:27

11

这里是忽略NULL字段

@JsonSerialize最新的注释(包括= JsonSerialize。 Inclusion.NON_NULL)

7

使用杰克逊2.1.2我发现我可以使用 @JsonInclude(Include.NON_NULL)来注释这个类,以便空值根本不被序列化。

+0

这和@JsonSerialize有什么区别? – 2014-10-16 11:41:10

1

随着最新版本的杰克逊,在ObjectMapper,你可以这样做:

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);