【问题标题】:Formatting JSON before writing to File在写入文件之前格式化 JSON
【发布时间】:2012-06-13 04:43:40
【问题描述】:

目前我使用Jackson JSON Processor 将首选项数据写入文件,主要是因为我希望高级用户能够修改/备份这些数据。 Jackson 对此非常棒,因为它非常易于使用,而且显然表现不错(参见here),但是我似乎遇到的唯一问题是当我运行myObjectMapper.writeValue(myFile, myJsonObjectNode) 时,它会将所有数据写入@ 987654324@ 到一行。我想做的是将 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
}

有没有人知道我可以用 Jackson 做到这一点,还是我必须从 Jackson 获取 JSON 字符串并使用另一个第三方库来格式化它?

提前致谢!

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

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

     ObjectWriter writer = mapper.defaultPrettyPrintingWriter();
    

    【讨论】:

    • ...哇。我以为我彻底搜索了 ObjectMapper 中每个函数的 javadocs。我不敢相信我错过了这个。我实际上找不到mapper.defaultPrettyPrintingWriter(),但实际上发现它是mapper.writerWithDefaultPrettyPrinter()。感谢您的帮助!
    • 功能不匹配可能是由于版本不同。我正在使用杰克逊 2.0.2。
    • mapper.defaultPrettyPrintingWriter() 实际上在 Jackson 1.9.2 中已被弃用
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      根据上面提到的 cmets,这对我很有效,

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

      content 是您的 JSON 字符串响应

      杰克逊版本:2.12

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-25
          • 1970-01-01
          • 2022-01-12
          相关资源
          最近更新 更多