我使用Jackson并想漂亮地打印JSON,使得在阵列中的每个元素进行到每一行,如:杰克逊JSON反序列化:在每一行数组元素
{ "foo" : "bar", "blah" : [ 1, 2, 3 ] }
设置SerializationFeature.INDENT_OUTPUT
真只是插入新行字符而不是数组元素,用这种方式打印对象:
{ "foo" : "bar", "blah" : [1, 2, 3] }
有没有人知道如何做到这一点?谢谢!
我使用Jackson并想漂亮地打印JSON,使得在阵列中的每个元素进行到每一行,如:杰克逊JSON反序列化:在每一行数组元素
{ "foo" : "bar", "blah" : [ 1, 2, 3 ] }
设置SerializationFeature.INDENT_OUTPUT
真只是插入新行字符而不是数组元素,用这种方式打印对象:
{ "foo" : "bar", "blah" : [1, 2, 3] }
有没有人知道如何做到这一点?谢谢!
你可以扩展DefaultPrettyPrinter和覆盖的方法beforeArrayValues(...)和writeArrayValueSeparator(...)到archieve期望的行为。之后,您必须通过setPrettyPrinter(…)将您的新实现添加到您的JsonGenerator。
尝试JSON发电机...
多亏了有用的提示,我可以配置我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);
}
由OP谢天谢地提供的answer显示一种方式,获得单阵列 - 元素每行格式化JSON String
来自writeValueAsString
。基于这里的解决方案直接写入相同的格式化JSON与writeValue
文件用更少的代码:
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);
}
如果你不希望延长DefaultPrettyPrinter
你也可以只设置indentArraysWith
属性外:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(DefaultPrettyPrinter.Lf2SpacesIndenter.instance);
String json = objectMapper.writer(prettyPrinter).writeValueAsString(object);
感谢您分享您的解决方案。 +1 – nutlike 2013-02-18 15:43:55