Java Jackson JSON反序列化:每行中的数组元素

Java Jackson JSON反序列化:每行中的数组元素,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我正在使用并希望打印JSON,以便数组中的每个元素都指向每一行,如: { "foo" : "bar", "blah" : [ 1, 2, 3 ] } 有人知道如何做到这一点吗?谢谢 尝试JSON生成器 您可以扩展并重写ArrayValues(…)和writeArrayValueSeparator(…)之前的方法,以归档所需的行为。之后,您必须通过将新实现添加到JsonGenerator中。多亏了这些有用的提示,我能够使用所需的缩进配置我的ObjectMapp

我正在使用并希望打印JSON,以便数组中的每个元素都指向每一行,如:

{ "foo" : "bar", "blah" : [ 1, 2, 3 ] }
有人知道如何做到这一点吗?谢谢

尝试JSON生成器



您可以扩展并重写ArrayValues(…)和writeArrayValueSeparator(…)之前的方法,以归档所需的行为。之后,您必须通过将新实现添加到JsonGenerator中。

多亏了这些有用的提示,我能够使用所需的缩进配置我的
ObjectMapper
,如下所示:

私有静态类PrettyPrinter扩展了DefaultPrettyPrinter{
public static final PrettyPrinter实例=new PrettyPrinter();
公共预印字机(){
_arrayIndenter=Lf2SpacesIndenter.instance;
}
}
私有静态类工厂扩展了JsonFactory{
@凌驾
受保护的JsonGenerator\u createGenerator(Writer out,IOContext ctxt)抛出IOException{
返回super.\u createGenerator(out,ctxt).setPrettyPrinter(PrettyPrinter.instance);
}
}
{
ObjectMapper mapper=新的ObjectMapper(新工厂());
configure(SerializationFeature.INDENT_输出,true);
}
感谢OP提供的方法显示了从
writeValueAsString
获取每行一个数组元素的方法,格式为JSON
String
。基于此,这里提供了一种解决方案,可使用
writeValue
将相同格式的JSON直接写入文件,代码更少:

私有静态类PrettyPrinter扩展了DefaultPrettyPrinter{
public static final PrettyPrinter实例=new PrettyPrinter();
公共预印字机(){
_arrayIndenter=Lf2SpacesIndenter.instance;
}
}
{
ObjectMapper mapper=新的ObjectMapper();
ObjectWriter=mapper.writer(PrettyPrinter.instance);
writeValue(destFile,objectToSerialize);
}

如果您不想扩展
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);
映射器可以配置(jackson-2.6)为:


感谢您分享您的解决方案+1Lf2SpacesIndenter已弃用(并在较新版本中消失);使用DefaultIndenter.SYSTEM\u LINEFEED\u实例使用DefaultIndenter.SYSTEM\u LINEFEED\u实例为我工作。这个答案提供了一个更简单的解决方案。
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 mapper = ...
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);
mapper.setDefaultPrettyPrinter(prettyPrinter);

//use mapper