如何在Python中美化JSON?

有人可以build议我怎么可以在Python中或通过命令行美化JSON?

唯一可以做到的基于在线的JSON美化器是: http : //jsonviewer.stack.hu/ 。

但是,我需要从Python中使用它。

这是我的数据集:

{ "head": {"vars": [ "address" , "description" ,"listprice" ]} , "results": { "bindings": [ { "address" : { "type":"string", "value" : " Dyne Road, London NW6"}, "description" :{ "type":"string", "value" : "6 bed semi detached house"}, "listprice" : { "type":"string", "value" : "1,150,000"} } , { "address" : { "type":"string", "value" : " Tweedy Road, Bromley BR1"}, "description" :{ "type":"string", "value" : "5 bed terraced house"}, "listprice" : { "type":"string", "value" : "550,000"} } , { "address" : { "type":"string", "value" : " Vera Avenue, London N21"}, "description" :{ "type":"string", "value" : "4 bed detached house"}, "listprice" : { "type":"string", "value" : " 995,000 "} } , { "address" : { "type":"string", "value" : " Wimbledon Park Side, London SW19"}, "description" :{ "type":"string", "value" : "3 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Westbere Road, West Hampstead, London NW2"}, "description" :{ "type":"string", "value" : "5 bedroom semi detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " The Avenue, Hatch End, Pinner HA5"}, "description" :{ "type":"string", "value" : "5 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Princes Park Avenue, London NW11"}, "description" :{ "type":"string", "value" : "4 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Canons Drive, Edgware HA8"}, "description" :{ "type":"string", "value" : "4 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Westbere Road, West Hampstead NW2"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Haymills Estate, Ealing, London"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Dene Terrace Woodclyffe Drive, Chislehurst, Kent BR7"}, "description" :{ "type":"string", "value" : "5 bedroom terraced house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Dene Terrace Woodclyffe Drive, Chislehurst, Kent BR7"}, "description" :{ "type":"string", "value" : "5 bedroom semi detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Northwick Close, St John's Wood NW8"}, "description" :{ "type":"string", "value" : "3 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Claremont Gardens, Surbiton KT6"}, "description" :{ "type":"string", "value" : "13 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Dene Terrace Woodclyffe Drive, Chislehurst, Kent BR7"}, "description" :{ "type":"string", "value" : "5 bedroom end terrace house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Stamford Road, London N1"}, "description" :{ "type":"string", "value" : "4 bedroom terraced house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Stanhope Avenue, London N3"}, "description" :{ "type":"string", "value" : "6 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Haymills Estate, Ealing, London"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Elms Crescent, London SW4"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Princes Park Avenue, London NW11"}, "description" :{ "type":"string", "value" : "4 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Abbeville Road, London SW4"}, "description" :{ "type":"string", "value" : "4 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Canons Drive, Edgware HA8"}, "description" :{ "type":"string", "value" : "4 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Henson Avenue, Willesdon Green NW2"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Woodstock Road, London NW11"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Tamworth Street, London SW6"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Stanhope Avenue, Finchley, London"}, "description" :{ "type":"string", "value" : "5 bedroom semi detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " The Old Burlington, Church Street, London W4"}, "description" :{ "type":"string", "value" : "3 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Ebury Close, Northwood HA6"}, "description" :{ "type":"string", "value" : "4 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Middleton Road, London NW11"}, "description" :{ "type":"string", "value" : "4 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Henson Avenue, Willesden Green NW2"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Huron Road, London SW17"}, "description" :{ "type":"string", "value" : "6 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Corringway, Ealing W5"}, "description" :{ "type":"string", "value" : "5 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Woodlands Avenue, New Malden KT3"}, "description" :{ "type":"string", "value" : "5 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Gunnersbury Park Area, Ealing, London"}, "description" :{ "type":"string", "value" : "6 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Blenheim Gardens, London, Brent NW2"}, "description" :{ "type":"string", "value" : "6 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Creighton Road, London NW6"}, "description" :{ "type":"string", "value" : "4 bedroom terraced house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Plaistow Lane, Bromley BR1"}, "description" :{ "type":"string", "value" : "7 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Greenfield Gardens, London NW2"}, "description" :{ "type":"string", "value" : "4 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Hendon Avenue, London N3"}, "description" :{ "type":"string", "value" : "3 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Peckham Park Road, London SE15"}, "description" :{ "type":"string", "value" : "6 bedroom semi detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Woodclyffe Drive, Chislehurst BR7"}, "description" :{ "type":"string", "value" : "5 bedroom house for sale"}, "listprice" : { "type":"string", "value" : " From 1,250,000 "} } , { "address" : { "type":"string", "value" : " Highwood Hill, Mill Hill, London"}, "description" :{ "type":"string", "value" : "5 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Stanhope Avenue, London N3"}, "description" :{ "type":"string", "value" : "5 bedroom semi detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Kersley Mews, London SW11"}, "description" :{ "type":"string", "value" : "3 bedroom mews for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Ebury Close, Northwood HA6"}, "description" :{ "type":"string", "value" : "4 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Ellesmere Road, Chiswick W4"}, "description" :{ "type":"string", "value" : "6 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " The Avenue, Hatch End, Pinner, Middlesex"}, "description" :{ "type":"string", "value" : "5 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Wandsworth, London SW18"}, "description" :{ "type":"string", "value" : "6 bedroom semi detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Carlton Road, New Malden KT3"}, "description" :{ "type":"string", "value" : "4 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " St Mary's Mews, Ealing W5"}, "description" :{ "type":"string", "value" : "3 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Ritherdon Road, Balham, London SW17"}, "description" :{ "type":"string", "value" : "5 bedroom semi detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Goldsmith Avenue, London W3"}, "description" :{ "type":"string", "value" : "5 bedroom property for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } , { "address" : { "type":"string", "value" : " Plaistow Lane, Bromley, Kent BR1"}, "description" :{ "type":"string", "value" : "7 bedroom detached house for sale"}, "listprice" : { "type":"string", "value" : " 1,250,000 "} } ] } } 

从命令行:

 echo '{"one":1,"two":2}' | python -mjson.tool 

其输出:

 { "one": 1, "two": 2 } 

在程序上,Python手册描述了漂亮的JSON :

 >>> import json >>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4) { "4": 5, "6": 7 } 

在json模块中使用dumps函数的indent参数。

从文档:

 >>> import json >>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4) { "4": 5, "6": 7 } 

尝试下划线 :

 cat myfile.json | underscore print --color 

这是一个非常漂亮的工具,可以优雅地对结构化数据进行大量的操作,执行js代码片段,填充模板等等。它的logging非常有文档,抛光,并且可以用于严肃的使用。 我写了。 🙂

使用命令行提供json数据的最小的Python内解决scheme:

 import sys import json from pygments import highlight, lexers, formatters formatted_json = json.dumps(json.loads(sys.argv[1]), indent=4) colorful_json = highlight(unicode(formatted_json, 'UTF-8'), lexers.JsonLexer(), formatters.TerminalFormatter()) print(colorful_json) 

pjson提到的pjson启发。 这段代码需要安装pygments

输出示例:

在这里输入图像说明

我用python的cli命令是这样的:

 cat myfile.json | python -mjson.tool 

你应该可以在这里find更多的信息:

http://docs.python.org/library/json.html

 alias jsonp='pbpaste | python -m json.tool' 

这将很好地打印在OSX剪贴板上的JSON。 只需复制它,然后从Bash提示中调用别名。

它看起来像jsbeautifier开源他们的工具,并将其打包为Python和JS库,并作为CLI工具。 它看起来并不像他们打电话给一个networking服务,但我没有太仔细检查。 请参阅github回购安装说明。


从他们的Python CLI文档和库用法:

使用python进行美化:

 $ pip install jsbeautifier $ js-beautify file.js 

美化输出到stdout

jsbeautifier作为一个库使用很简单:

 import jsbeautifier res = jsbeautifier.beautify('your javascript string') res = jsbeautifier.beautify_file('some_file.js') 

…或者,指定一些选项:

 opts = jsbeautifier.default_options() opts.indent_size = 2 res = jsbeautifier.beautify('some javascript', opts) 

如果你想传递一个string而不是一个文件名,并且你正在使用bash,那么你可以像这样使用进程replace:

 $ js-beautify <(echo '{"some": "json"}') 

使用Python工具库

命令行:python -mjson.tool

在代码: http : //docs.python.org/library/json.html

你的数据结构不好。 价值领域特别是有许多空间和新线。 自动格式化程序将不能在此工作,因为它们不会修改实际的数据。 在生成输出数据时,根据需要进行过滤以避免出现空格。

你可以通过pipe道输出到jq 。 如果你的python脚本包含类似的东西

 print json.dumps(data) 

那么你可以开火:

 python foo.py | jq '.' 

用jsonlint(如xmllint):

 aptitude install python-demjson jsonlint -f foo.json 

首先安装pygments

然后

echo '<some json>' | python -m json.tool | pygmentize -l json