Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在写入文件之前格式化JSON_Java_Json_Jackson - Fatal编程技术网

Java 在写入文件之前格式化JSON

Java 在写入文件之前格式化JSON,java,json,jackson,Java,Json,Jackson,目前,我正在使用将首选项数据等写入文件,主要是因为我希望高级用户能够修改/备份这些数据。Jackson在这方面非常棒,因为它非常容易使用,而且显然执行得很好(请参阅),但是我唯一的问题似乎是在运行myObjectMapper.writeValue(myFile,myJsonObjectNode)时,它将ObjectNode中的所有数据写入一行。我想做的是将JSON格式化为更用户友好的格式 例如,如果我将一个简单的json树传递给它,它将写入以下内容: {"testArray":[1,2,3,{"

目前,我正在使用将首选项数据等写入文件,主要是因为我希望高级用户能够修改/备份这些数据。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}
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中不推荐使用