在写入File之前格式化JSON

目前我正在使用Jackson JSON处理器将偏好数据和文件等写入文件主要是因为我希望高级用户能够修改/备份这些数据。 Jackson非常棒,因为它非常容易使用,并且显然表现得很好(参见此处 ),但是我似乎唯一遇到的问题是当我运行myObjectMapper.writeValue(myFile, myJsonObjectNode)它会写入所有数据在ObjectNode中一行。 我想要做的是将JSON格式化为更加用户友好的格式。

例如,如果我将一个简单的json树传递给它,它将编写以下内容:

 {"testArray":[1,2,3,{"testObject":true}], "anotherObject":{"A":"b","C":"d"}, "string1":"i'm a string", "int1": 5092348315} 

我希望它在文件中显示为:

 { "testArray": [ 1, 2, 3, { "testObject": true } ], "anotherObject": { "A": "b", "C": "d" }, "string1": "i'm a string", "int1": 5092348315 } 

是否有人知道我可以用jackson做到这一点的方法,或者我是否必须从jackson获取JSON字符串并使用另一个第三方lib来格式化它?

提前致谢!

尝试像这样创建Object Writer

  ObjectWriter writer = mapper.defaultPrettyPrintingWriter(); 

您需要事先配置映射器,如下所示:

 ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true); mapper.writeValue(myFile, myJsonObjectNode); 

按照上面提到的评论,这对我很有用,

  Object json = mapper.readValue(content, Object.class); mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json); 

内容是您的JSON字符串响应

jackson版本:2.12

要在Jackson 2.0.2及更高版本中启用标准缩进,请使用以下命令:

 ObjectMapper myObjectMapper = new ObjectMapper(); myObjectMapper.enable(SerializationFeature.INDENT_OUTPUT); myObjectMapper.writeValue(myFile, myJsonObjectNode) 

来源: https : //github.com/FasterXML/jackson-databind