我想让序列化的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] 删除。
我来说两句