我想让我的序列化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",
}
答案 0 :(得分:1)
据我了解,您希望在对象中的字段之前看到缩进。所以,要实现这一点,只需交换两行:
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(": ");
}
});
并使用自定义漂亮的打印机而不是useDefaultPrettyPrinter
。在这种情况下,输出将是:
{
"abc": "1",
"def": "2",
"ghi": "3"
}
答案 1 :(得分:0)
向缩放器添加缩进功能
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
String indent= mapper.writeValueAsString(valueObject);
答案 2 :(得分:0)
要覆盖writeObjectFieldValueSeparator()
函数,您还需要覆盖createInstance
方法。
这对我有用:
public class MyPrettyPrinter extends DefaultPrettyPrinter {
@Override
public DefaultPrettyPrinter createInstance() {
return new MyPrettyPrinter();
}
@Override
public void writeObjectFieldValueSeparator(JsonGenerator jg) throws IOException {
jg.writeRaw(": ");
}
}
然后将其用作映射器的作者:
objectMapper.writer(new MyPrettyPrinter()).writeValueAsString(object);
您可以找到有关此问题http://localhost:8080/v2/api-docs?group=api-infos的更多信息。