杰克逊自定义序列化器JSON格式

用户123454321

我想让序列化的json看起来像这样:

{
 "abc": "smth",
 "def": "smth",
 "ghi": "smth",
}

我如何通过杰克逊实现这一目标?这是我到目前为止所做的

@Override
    public void serialize(Value value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.useDefaultPrettyPrinter();
        gen.writeStringField("abc", value.getAaa());
        gen.writeStringField("def", value.getDdd());
        gen.writeStringField("ghi", value.getGgg());
        gen.writeEndObject();
    }

我得到以下输出

{
"abc" : "smth",
"def" : "smth",
"ghi" : "smth",
}
格言

据我了解,您想在对象中的字段之前看到缩进。因此,要实现此目的,只需交换两行:

gen.useDefaultPrettyPrinter();
gen.writeStartObject();
...

我的测试应用程序:

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;

public class Main {

    public static void main(String[] args) throws Exception {
        JsonFactory jsonFactory = new JsonFactory();

        JsonGenerator gen = jsonFactory.createGenerator(System.out);

        gen.useDefaultPrettyPrinter();
        gen.writeStartObject();
        gen.writeStringField("abc", "1");
        gen.writeStringField("def", "2");
        gen.writeStringField("ghi", "3");
        gen.writeEndObject();

        gen.flush();
    }
}

生成以下输出:

{
  "abc" : "1",
  "def" : "2",
  "ghi" : "3"
}

更新:关于周围的空间:这个方法。如您所见,它只有两个选项:<space>:<space>和,:因此,开箱即用,您不能这样做,但是您可以覆盖此方法:

gen.setPrettyPrinter(new DefaultPrettyPrinter() {
    @Override
    public void writeObjectFieldValueSeparator(JsonGenerator jg) throws IOException {
        jg.writeRaw(": ");
    }
});

并使用自定义漂亮打印机代替useDefaultPrettyPrinter在这种情况下,输出将是:

{
  "abc": "1",
  "def": "2",
  "ghi": "3"
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

杰克逊自定义序列化对象

在自定义序列化器杰克逊内部配置objectmapper?

杰克逊自定义反序列化器无法在春季启动中工作

使用杰克逊的对象数组的自定义序列化器

如何在杰克逊中编写自定义属性反序列化器

杰克逊自定义日期序列化器

自定义JSON序列化从Java科特林元杰克逊

杰克逊反序列化不是在自定义解串器调用反序列化

杰克逊自定义序列化和反序列化

使用杰克逊可自定义序列化和反序列化

杰克逊使用自定义日期格式错误地反序列化Joda日期

如何自定义序列化杰克逊日期,@JsonSerialize不工作

杰克逊:反序列化的自定义XML中的属性POJO

杰克逊:反序列化map <String,Object>到自定义嵌套Pojo

具有自定义条件的杰克逊多态反序列化

杰克逊将地图序列化到自定义输出列表

杰克逊:如何反序列化嵌套的自定义地图和列表?

杰克逊反序列化:自定义对象工厂

杰克逊(Jackson)如何在自定义序列化器/反序列化器中检索父bean

如何在自定义序列化程序中访问默认的杰克逊序列化

无需编写自定义序列化器和/或反序列化器,即可对第三方类进行杰克逊序列化和反序列化

杰克逊自定义序列化程序:将对象更改为简单的属性和包含对象的值

使用杰克逊反序列化包含@JsonFormat(shape = JsonFormat.Shape.ARRAY)和自定义对象的json

用杰克逊反序列化为自定义对象的HashMap

自定义值序列杰克逊定制的注解

用杰克逊进行JSON反序列化

序列化嵌套对象json杰克逊

使用杰克逊将自定义反序列化类添加到已经存在的@JsonDeserialize批注中

杰克逊/ GSON序列化和反序列化的JavaFX属性以JSON