8

我已经开始使用 Jackson 作为 JSON 生成器,作为 google GSON 的替代品。我遇到了杰克逊生成对象的问题:如果对象确实为空,则为空。另一方面,GSON 在 JSON 中生成 NO 条目,这是我想要的行为。当一个对象丢失时,有没有办法阻止杰克逊生成空对象/值?

杰克逊

        ObjectMapper mapper = new ObjectMapper();
    StringWriter sw = new StringWriter();
    mapper.writeValue(sw, some_complex_object);
    String jackson = sw.getBuffer().toString();

    System.out.println("********************* START JACKSON JSON ****************************");
    System.out.println(jackson);
    System.out.println("********************* END JACKSON JSON ****************************");

生成这个:

{"eatwithrustyspoon":{ "urlList":null ,"device":"iPad","os":"iPhone OS","peer_id":

GSON 看起来像这样:

        Gson gson = new Gson();
    String json = gson.toJson(some_complex_object);

    System.out.println("********************* START GSON JSON ****************************");
    System.out.println(json);
    System.out.println("********************* END GSON JSON ****************************");

它会生成这个(这是我想要的 - 请注意“urlList”:null 没有生成):

{"eatwithrustyspoon":{"device":"iPad","os":"iPhone OS","peer_id"

4

3 回答 3

12

杰克逊常见问题解答

我可以省略写入具有空值的 Bean 属性吗?(“如何防止写入空属性”,“如何抑制空值”)

是的。根据JacksonAnnotationSerializeNulls,您可以使用:

  objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
  // or (for older versions):
  objectMapper.configure(SerializationConfig.WRITE_NULL_PROPERTIES, false);

瞧,没有更多的空值。请注意,您必须在 bean 序列化之前配置映射器,因为此设置可能与序列化程序一起缓存。因此,设置得太晚可能会阻止更改生效。

于 2013-02-13T16:42:15.973 回答
2

我的问题有点不同,实际上我得到了 POJO 类属性的 Null 值。

但是我通过在我的 pojo 类中映射属性来解决这个问题,如下所示:

@JsonProperty("PROPERTY_NAME")

认为它可以帮助某人:)

于 2016-10-05T12:33:16.303 回答
1

以下解决方案救了我。

  objectMapper.setSerializationInclusion(Include.NON_NULL);
于 2016-07-28T09:01:18.637 回答