将JSON格式化后再写入文件

8

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

I would want it to show up in the file as:

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

有没有人知道如何使用Jackson来实现这个功能,或者我必须从Jackson获取JSON字符串并使用另一个第三方库来格式化它?谢谢!
4个回答

8
尝试按照以下方式创建Object Writer:
 ObjectWriter writer = mapper.defaultPrettyPrintingWriter();

3
哇,我以为我已经彻底地查找了ObjectMapper中每个函数的javadocs,没想到会错过这个。我简直不敢相信。而且我实际上找不到 mapper.defaultPrettyPrintingWriter(),但是我找到了它实际上是 mapper.writerWithDefaultPrettyPrinter()。感谢帮助! - Brandon
函数不匹配可能是由于不同的版本引起的。我正在使用Jackson 2.0.2。 - Brandon
mapper.defaultPrettyPrintingWriter() 在 Jackson 1.9.2 中已经被弃用。 - Marco Lackovic
Jackson版本2.15.2:mapper.writerWithDefaultPrettyPrinter() - undefined

4

要在Jackson 2.0.2及以上版本中启用标准缩进,请使用以下内容:

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

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


4

在此之前,您需要按照以下方式配置映射器:

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

2
根据上述评论,这对我非常有效。
     Object json = mapper.readValue(content, Object.class);
     mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json); 

content 是你的JSON字符串响应时

Jackson版本:2.12


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接