启用Object Mapper writeValueAsString方法以包含空值

时间:2014-04-25 15:36:51

标签: java json string jackson

我有一个JSON对象,可能包含一些空值。 我使用com.fasterxml.jackson.databind中的ObjectMapper将我的JSON对象转换为String。

private ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(object);

如果我的对象包含任何包含值为null的字段,则该字段不包含在来自writeValueAsString的String中。 我希望我的ObjectMapper给我字符串中的所有字段,即使它们的值为null。

示例:

object = {"name": "John", "id": 10}
json   = {"name": "John", "id": 10}

object = {"name": "John", "id": null}
json   = {"name": "John"}

2 个答案:

答案 0 :(得分:5)

默认情况下,杰克逊应将null字段序列化为null。请参阅以下示例

public class Example {

    public static void main(String... args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        String json = mapper.writeValueAsString(new Test());
        System.out.println(json);
    }

    static class Test {
        private String help = "something";
        private String nope = null;

        public String getHelp() {
            return help;
        }

        public void setHelp(String help) {
            this.help = help;
        }

        public String getNope() {
            return nope;
        }

        public void setNope(String nope) {
            this.nope = nope;
        }
    }
}

打印

{
  "help" : "something",
  "nope" : null
}

你不需要做任何特别的事。

答案 1 :(得分:0)

Include.ALWAYS为我工作。

objectMapper.setSerializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include.ALWAYS);

包含的其他可能值为

  • Include.NON_DEFAULT
  • Include.NON_EMPTY
  • Include.NON_NULL