如何在TextMate,Emacs,BBEdit或Sublime Text 2中缩进JSON数据?

nop*_*ole 6 emacs textmate json bbedit sublimetext2

[ 更新:发布此问题8小时后,JSON包的作者收到了有关该问题的通知,并修复了该问题.]

我在一个文件中有以下JSON数据application.json,显示在本文末尾,我使用TextMate和JSON包,Emacs,BBEdit和Sublime Text 2来正确缩进它,但似乎他们都不能.

TextMate和Sublime Text 2都坚持第一个{不应该缩进,第一个主要问题是结束括号"child": {.TextMate和Sublime Text 2都拒绝对齐}左下方"child": {.Emacs对每一行继续进一步缩进,而且BBEdit似乎根本没有重新缩进功能(这可能是吗?).

有没有办法正确缩进文件,或者TextMate和Sublime Text 2是否为JSON数据做正确的事情?

[ 
{
    "settings": [ "master" ],
    "appPort": "8666",
    "specs": {
        "frame" : {
            "type" : "HTMLFrameMojit",

            "config": {
                "deploy": true,
                "child": {
                    "type" : "HelloWorldMojit"
                    },
                    "assets": {
                        "top": {
                            "css": [
                            "/static/HelloWorldMojit/assets/index.css"
                            ]
                        }
                    }
                }
            }
        }
        },
        {
            "settings": [ "environment:development" ],
            "staticHandling": {
                "forceUpdate": true
            }
        }
        ]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ark 13

找到了一个简单易用的BBEdit解决方案.

将以下脚本放入
~/Library/Application Support/BBEdit/Text Filters/FormatJSON.sh

#!/bin/bash
python -m json.tool
Run Code Online (Sandbox Code Playgroud)
  1. 在BBEdit中打开一个JSON文件.没有必要重启BBEdit,因为BBEdit摇滚!
  2. 选择文本>应用文本过滤器> FormatJSON

我用一个JSON文件对它进行了测试,该文件在一行上有3,612,683个字符.BBEdit打开了这个文件并重新格式化而没有显示SPOD.


小智 8

在 BBEdit 14.0 及更高版本中,文本菜单上的“重新格式化文档”将重排 JSON。您还可以将内置语言服务器支持与支持重新格式化的 JSON 语言服务器结合使用。


dkb*_*dkb 6

解决方案1:使用Python

这个答案与这个答案类似,只是我用的python file是 JSON 格式。

  1. bbedit如果应用程序已打开,则退出该应用程序,
  2. 将以下脚本Pretty-json.py~/Library/Application\ Support/BBEdit/Text\ Filters/放入路径中
#!/usr/bin/env python
# You can change above she-bang line depending on your Mac configuration

import sys
import json

def main():
    input = sys.stdin.read()
    try:
        obj = json.loads(input)
    except Exception as e:
        print input + "\n\nERROR: " + str(e)
        return 1
    print(json.dumps(obj, indent=2))
    return 0

if __name__ == '__main__':
    sys.exit(main())
Run Code Online (Sandbox Code Playgroud)
  1. 要进行测试,请在 BBEdit 中打开一个 JSON 文件。

  2. 选择Text--> Apply Text Filter-->pretty-json.py

  3. 如果您遇到格式错误等任何问题,则上述脚本将在新文件中添加错误,并且不会更改原始 JSON。这个答案
    不是这样的

参考:https://gist.github.com/brokaw/95ade1358954cd97d0f2c8e992e14b08

欲了解更多信息:请参阅

上面的过滤器对于较小的 JSON 文件效果很好,但如果 JSON 文件很大(~ 40MB),那么格式化会很慢。

要解决此问题,请使用以下解决方案

解决方案 2:使用jq

为了更快的 json 格式化,

  1. 安装jq brew install jq
  2. 检查您是否能够jq在终端中执行,或者需要完整路径,添加以下文件中的任意一个来代替jq
  3. 在位置添加fast-json-pretty.sh文件~/Library/Application\ Support/BBEdit/Text\ Filters/
  4. 重新启动 bbedit。
#!/bin/bash
jq
Run Code Online (Sandbox Code Playgroud)


小智 4

我刚刚在捆绑包中更正了此问题,对于 2.0 用户,捆绑包应在 24 小时内更新并进行更正。