在写入File之前格式化JSON

时间:2012-06-13 04:43:41

标签: java json jackson

目前我正在使用Jackson JSON Processor来编写首选项数据以及文件内容,主要是因为我希望高级用户能够修改/备份这些数据。杰克逊非常棒,因为它非常容易使用,并且显然表现得很好(参见here),然而我似乎遇到的唯一问题是当我运行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
}

有没有人知道我可以用杰克逊这样做的方法,还是我必须从杰克逊那里获得JSON字符串并使用另一个第三方lib来格式化它?

提前致谢!

4 个答案:

答案 0 :(得分:5)

尝试像这样创建Object Writer

 ObjectWriter writer = mapper.defaultPrettyPrintingWriter();

答案 1 :(得分:4)

您需要事先按如下方式配置映射器:

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

答案 2 :(得分:2)

根据上述评论,这对我很有用,

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

内容是您的JSON字符串响应

杰克逊版本:2.12

答案 3 :(得分:1)

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

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

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