我正在使用杰克逊,并希望漂亮地打印 JSON,以便数组中的每个元素都进入每一行,例如:
{ “富”:“酒吧”, “废话”:[ 1、 2、 3 ] }
设置SerializationFeature.INDENT_OUTPUT
true 只为对象字段插入换行符,而不是数组元素,以这种方式打印对象:
{ “富”:“酒吧”, “废话”:[1、2、3] }
有谁知道如何实现这一目标?谢谢!
我正在使用杰克逊,并希望漂亮地打印 JSON,以便数组中的每个元素都进入每一行,例如:
{ “富”:“酒吧”, “废话”:[ 1、 2、 3 ] }
设置SerializationFeature.INDENT_OUTPUT
true 只为对象字段插入换行符,而不是数组元素,以这种方式打印对象:
{ “富”:“酒吧”, “废话”:[1、2、3] }
有谁知道如何实现这一目标?谢谢!
如果您不想扩展DefaultPrettyPrinter
,也可以在indentArraysWith
外部设置属性:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);
String json = objectMapper.writer(prettyPrinter).writeValueAsString(object);
多亏了有用的提示,我能够配置我ObjectMapper
所需的缩进如下:
private static class PrettyPrinter extends DefaultPrettyPrinter {
public static final PrettyPrinter instance = new PrettyPrinter();
public PrettyPrinter() {
_arrayIndenter = Lf2SpacesIndenter.instance;
}
}
private static class Factory extends JsonFactory {
@Override
protected JsonGenerator _createGenerator(Writer out, IOContext ctxt) throws IOException {
return super._createGenerator(out, ctxt).setPrettyPrinter(PrettyPrinter.instance);
}
}
{
ObjectMapper mapper = new ObjectMapper(new Factory());
mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
}
您可以扩展DefaultPrettyPrinter并覆盖beforeArrayValues(...)和writeArrayValueSeparator(...)方法来归档所需的行为。之后,您必须通过setPrettyPrinter(...)将新的实现添加到您的 JsonGenerator中。
映射器可以配置(jackson-2.6):
ObjectMapper mapper = ...
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);
mapper.setDefaultPrettyPrinter(prettyPrinter);
//use mapper
值得庆幸的是,OP 提供 的答案String
显示了一种从writeValueAsString
. writeValue
基于它here的解决方案可以使用更少的代码将相同格式的JSON直接写入文件:
private static class PrettyPrinter extends DefaultPrettyPrinter {
public static final PrettyPrinter instance = new PrettyPrinter();
public PrettyPrinter() {
_arrayIndenter = Lf2SpacesIndenter.instance;
}
}
{
ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writer(PrettyPrinter.instance);
writer.writeValue(destFile, objectToSerialize);
}