Skip to content

Instantly share code, notes, and snippets.

@nicky-zs
Created July 9, 2014 08:21
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save nicky-zs/6af8a1afc771ad76d463 to your computer and use it in GitHub Desktop.
Save nicky-zs/6af8a1afc771ad76d463 to your computer and use it in GitHub Desktop.
A modification to python's standard library: json/tool.py, which makes it better print JSON containing non-ascii code.
r"""Command-line tool to validate and pretty-print JSON
Usage::
$ echo '{"json":"obj"}' | python -m json.tool
{
"json": "obj"
}
$ echo '{ 1.2:3.4}' | python -m json.tool
Expecting property name: line 1 column 2 (char 2)
"""
import sys
import json
import codecs
def main():
if len(sys.argv) == 1:
infile = sys.stdin
outfile = sys.stdout
elif len(sys.argv) == 2:
infile = open(sys.argv[1], 'rb')
outfile = sys.stdout
elif len(sys.argv) == 3:
infile = open(sys.argv[1], 'rb')
outfile = open(sys.argv[2], 'wb')
else:
raise SystemExit(sys.argv[0] + " [infile [outfile]]")
try:
obj = json.load(infile)
except ValueError, e:
raise SystemExit(e)
s = json.dumps(obj, sort_keys=True, indent=4, ensure_ascii=False)
outfile.write(codecs.encode(s, 'utf-8'))
outfile.write('\n')
if __name__ == '__main__':
main()
@nicky-zs
Copy link
Author

Just use this script to replace /usr/lib/python2.7/json/tool.py !

@zj-github
Copy link

zj-github commented Jan 9, 2017

i have the exception :TypeError: coercing to Unicode: need string or buffer, NoneType found,
the script like this
`
import sys
import json
import codecs

def main():
if len(sys.argv) == 1:
infile = sys.stdin
outfile = sys.stdout
elif len(sys.argv) == 2:
infile = open(sys.argv[1], 'rb')
outfile = sys.stdout
elif len(sys.argv) == 3:
infile = open(sys.argv[1], 'rb')
outfile = open(sys.argv[2], 'wb')
else:
raise SystemExit(sys.argv[0] + " [infile [outfile]]")
with infile:
try:
obj = json.load(infile)
except ValueError, e:
raise SystemExit(e)
with outfile:
s = json.dump(obj, outfile, sort_keys=True,indent=4, separators=(',', ': '),ensure_ascii=False)
outfile.write(codecs.encode(s, 'utf-8'))
outfile.write('\n')
`

@qzi
Copy link

qzi commented Mar 20, 2017

with outfile:
    s = json.dumps(obj, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)
    #s = json.dump(obj, outfile, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)
    outfile.write(codecs.encode(s, 'utf-8'))
    outfile.write('\n')

@yanjinbin
Copy link

不太懂 如何去编辑json.tool先收藏了 周末再看看

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment