gpt4 book ai didi

json - Jackson 自定义序列化器 json 格式

转载 作者:行者123 更新时间:2023-12-03 23:19:21 25 4
gpt4 key购买 nike

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

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

我怎样才能用 jackson 实现这一目标?这是我到目前为止所做的
@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"
}

更新 : 关于周围的空格 : .看 this方法。如您所见,它只有两个选项: <space>:<space>:所以,开箱即用,你不能这样做,但你可以覆盖这个方法:
gen.setPrettyPrinter(new DefaultPrettyPrinter() {
@Override
public void writeObjectFieldValueSeparator(JsonGenerator jg) throws IOException {
jg.writeRaw(": ");
}
});

并使用自定义 pretty-print 而不是 useDefaultPrettyPrinter .在这种情况下,输出将是:
{
"abc": "1",
"def": "2",
"ghi": "3"
}

关于json - Jackson 自定义序列化器 json 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com