当前位置: 首页 > 知识库问答 >
问题:

Jackson-序列化包含空元素的列表

武友樵
2023-03-14

我正在使用Jackson 2.4将对象序列化为JSON。
当我序列化对象列表时,如果某些元素为空,则结果json字符串包含一些“空”字符串。

如何防止“null”元素被序列化?objectmapper是否有任何配置?我已经设置了“setSerializationInclusive(include.non_null)”

下面是我的代码:

List<String> strings = new ArrayList<>();
strings.add("string 1");
strings.add("string 2");
strings.add(null);
strings.add(null);

连载之后我得到了这个:

[string 1, string 2, null, null]
java prettyprint-override">[string 1, string 2]

共有1个答案

吕承望
2023-03-14

使用@JSONInclude注释。

@JsonInclude(Include.NON_NULL)
class Foo {
  String bar;

}

编辑

您还可以创建自己的序列化程序。
例如:

public static void main(String[] args) throws JsonProcessingException {

        List<String> strings = new ArrayList<>();
        strings.add("string 1");
        strings.add("string 2");
        strings.add(null);
        strings.add(null);

        ObjectMapper mapper=new ObjectMapper();
        mapper.getSerializerProvider().setNullValueSerializer(new NullSerializer());
        System.out.println(mapper.writeValueAsString(strings));
    }
class NullSerializer extends JsonSerializer<Object>
{
  @Override
  public void serialize(Object obj, JsonGenerator jsonGen, SerializerProvider unused) 
      throws IOException, JsonProcessingException
  {
    jsonGen.writeFieldName("");
  }
}
["string 1","string 2","",""]

然后可以删除jsongen.writeFieldName(“”);打印

["string 1","string 2"]
 类似资料:
  • 我的API有很多db调用,因此我需要使用或处理几乎每个数据库调用,但是有没有比这更好的方法 每次我要从数据库中检索用户行时?

  • 编辑:应你们中一些人的要求,我发布了我的真实数据结构和类。我没能让你更容易理解这个问题。 我在解决JacksonJSON数组元素时遇到问题,最终出现异常,我将在本文后面报告。 我有一个来自第三方提供商的冗长的JSON字符串: 我的Java合奏如下。 这是最外层的容器: 这是第一级容器: 这是最里面的层次: 最后,这是我的反序列化代码: 在极端综合法中,我试图将问题概括如下: 类有一个模块成员,它是

  • 我们最近从Jackson json 2.8.2转移到了2.9.4,我们看到了行为上的重大变化。我们使用的是JDK1.8。 前面,我们在对象映射器级别将序列化包含设置为NON_DEFAULT,所有操作都很正常。 现在,在更改为2.9.2之后,NON_DEFAULT将忽略所有默认值,如boolean false、integer 0、....这破坏了我们的测试用例。 我们的要求是只忽略空字段和空白字段,

  • 我有一个JSON字符串,它将空列表标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到这样的字符串: 我想将其反序列化为父类,将子类正确设置为子类的空列表。 对于上面的JSON字符串,我想要一个将其id设置为13的对象,并将子元素设置为新的ArrayList 我知道如何为整个类使用注释 然后呢 但是,我想解决从字符串正确实例化列表的一般问题: 我能得到这样的东西吗?

  • 问题内容: 使用Jersey和Jackson创建REST接口,当其中包含0或1个元素时,如何将列表字段序列化为列表。例如: 当bar没有元素时,结果序列化为;当它包含单个元素时,结果序列化为该元素,而不是包含单个元素的数组。有没有办法让它们始终序列化为数组? 作为参考,我使用的是Jersey 1.10和Jackson 1.9.2。 问题答案: 我很确定您实际上并没有使用Jackson(JSON序列

  • 问题内容: 我和Jackson有一个问题,我认为应该很容易解决,但是这真使我丧命。 假设我有一个看起来像这样的Java POJO类(假设对我来说是Getters和Setters): 我想将看起来像这样的JSON反序列化为User对象: 杰克逊给了我一些问题,因为用户不是JSON中的第一级对象。我显然可以制作一个具有单个User对象的UserWrapper类,然后使用该对象反序列化,但是我知道必须有