如何在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更多的信息:
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