【问题标题】:clang-format a json fileclang 格式化一个 json 文件
【发布时间】:2016-03-08 00:03:12
【问题描述】:

我有一个 json 文件。如果我在其上运行 clang-format,它会将其格式化为代码(丑陋)。

{
  "name" : "My great app",
           "description" : "It's really cool.",
                           "version" : "0.0.1"
}

如果我把 'foo = ' 放在文件的开头,那就太好了,但它不再是 json。

foo = {
  "name" : "My great app",
  "description" : "It's really cool.",
  "version" : "0.0.1"
}

如何获得 clang-format 以格式化 json 文件中的裸对象,如第二个示例所示?

【问题讨论】:

  • 你可以在文件前面加上foo =,运行clang-format然后去掉前缀。
  • JSON 是一种格式,而不是某种数据类型。你可以使用原生对象,然后将它们字符串化为 json。
  • 这里有一些其他选项:stackoverflow.com/questions/352098/…

标签: javascript json clang-format


【解决方案1】:

我喜欢使用的另一个程序是jq。它非常易于使用,文档也很棒。例如,对于简单的重新格式化,您可以这样做:

jq . test.json

【讨论】:

    【解决方案2】:

    我一直在努力让这个被接受,https://reviews.llvm.org/D93528,这可以通过在文件前面添加一个隐藏的“x =”来完成你的建议,然后在使用替换机制格式化后将其删除。

    在此之前,我认为您可以使用 clang-apply-replacements 做类似的事情

    【讨论】:

    • 您是否有(或了解其他人)计划通过 clang-format 改进对 JSON 格式的支持?我刚刚在 LLVM 13 中尝试过,似乎只支持IndentWidth 选项。
    • 你还想要什么?
    • : 周围的特定空间
    【解决方案3】:

    我个人会使用 python,使用 json 的包漂亮打印机:

    cat mydata.json | python -mjson.tool
    

    如果您不喜欢默认设置:

    cat mydata.json | python -c 'import json, sys; print(json.dumps(json.load(sys.stdin), indent=4, sort_keys=True))'
    

    否则,我没有安装clang-format,为了打印漂亮,我宁愿使用现有的工具。

    注意:您也可以在 vim 内执行此操作,并在完整文件选择上使用 == 普通命令☺

    【讨论】:

      【解决方案4】:

      如果您的系统上有json_pp,您也可以这样做:

      cat test.json | json_pp
      

      【讨论】:

        猜你喜欢
        • 2022-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        • 2015-05-20
        • 1970-01-01
        相关资源
        最近更新 更多