7

目前我正在使用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
}

有谁知道我可以用杰克逊做到这一点,还是我必须从杰克逊那里得到 JSON 字符串并使用另一个第三方库来格式化它?

提前致谢!

4

4 回答 4

7

尝试像这样创建对象编写器

 ObjectWriter writer = mapper.defaultPrettyPrintingWriter();
于 2012-06-13T04:56:05.720 回答
4

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

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
mapper.writeValue(myFile, myJsonObjectNode);
于 2013-03-14T13:11:59.670 回答
2

根据上面提到的评论,这对我很有用,

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

内容是您的JSON字符串响应

杰克逊版本:2.12

于 2015-09-03T06:30:28.003 回答
2

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

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

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

于 2017-10-30T09:55:46.823 回答