Java 在写入文件之前格式化JSON
目前,我正在使用将首选项数据等写入文件,主要是因为我希望高级用户能够修改/备份这些数据。Jackson在这方面非常棒,因为它非常容易使用,而且显然执行得很好(请参阅),但是我唯一的问题似乎是在运行Java 在写入文件之前格式化JSON,java,json,jackson,Java,Json,Jackson,目前,我正在使用将首选项数据等写入文件,主要是因为我希望高级用户能够修改/备份这些数据。Jackson在这方面非常棒,因为它非常容易使用,而且显然执行得很好(请参阅),但是我唯一的问题似乎是在运行myObjectMapper.writeValue(myFile,myJsonObjectNode)时,它将ObjectNode中的所有数据写入一行。我想做的是将JSON格式化为更用户友好的格式 例如,如果我将一个简单的json树传递给它,它将写入以下内容: {"testArray":[1,2,3,{"
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}
ObjectMapper myObjectMapper = new ObjectMapper();
myObjectMapper.enable(SerializationFeature.INDENT_OUTPUT);
myObjectMapper.writeValue(myFile, myJsonObjectNode)
我希望它在文件中显示为:
{
"testArray": [
1,
2,
3,
{
"testObject": true
}
],
"anotherObject": {
"A": "b",
"C": "d"
},
"string1": "i'm a string",
"int1": 5092348315
}
有没有人知道我可以用Jackson实现这一点,或者我必须从Jackson那里获取JSON字符串并使用另一个第三方库来格式化它
提前谢谢 尝试像这样创建对象编写器
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);
其中content是JSON字符串响应
Jackson版本:2.12要在Jackson 2.0.2及更高版本中启用标准缩进,请使用以下命令:
{"testArray":[1,2,3,{"testObject":true}], "anotherObject":{"A":"b","C":"d"}, "string1":"i'm a string", "int1": 5092348315}
ObjectMapper myObjectMapper = new ObjectMapper();
myObjectMapper.enable(SerializationFeature.INDENT_OUTPUT);
myObjectMapper.writeValue(myFile, myJsonObjectNode)
资料来源:
哇!我想我已经彻底搜索了ObjectMapper中每个函数的javadocs。真不敢相信我错过了这个。实际上,我找不到
mapper.defaultPrettyPrintingWriter()
,但实际上找到它是作为mapper.writerWithDefaultPrettyPrinter()
。谢谢你的帮助!功能不匹配可能是由于不同版本造成的。我正在使用Jackson 2.0.2。mapper.defaultPrettyPrintingWriter()
实际上在Jackson 1.9.2中不推荐使用