Created
November 2, 2016 18:19
-
-
Save sloanlance/7685c44bda7b0fc8235e5f293706200c to your computer and use it in GitHub Desktop.
Python: The json.tool included with Python. I copied it to note some changes I'd like to make. From: https://github.com/python/cpython/blob/master/Lib/json/tool.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 enclosed in double quotes: line 1 column 3 (char 2) | |
""" | |
import argparse | |
import collections | |
import json | |
import sys | |
def main(): | |
prog = 'python -m json.tool' | |
description = ('A simple command line interface for json module ' | |
'to validate and pretty-print JSON objects.') | |
parser = argparse.ArgumentParser(prog=prog, description=description) | |
parser.add_argument('infile', nargs='?', type=argparse.FileType(), | |
help='a JSON file to be validated or pretty-printed') | |
parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), | |
help='write the output of infile to outfile') | |
parser.add_argument('--sort-keys', action='store_true', default=False, | |
help='sort the output of dictionaries alphabetically by key') | |
options = parser.parse_args() | |
infile = options.infile or sys.stdin | |
outfile = options.outfile or sys.stdout | |
sort_keys = options.sort_keys | |
with infile: | |
try: | |
if sort_keys: | |
obj = json.load(infile) | |
else: | |
obj = json.load(infile, | |
object_pairs_hook=collections.OrderedDict) | |
except ValueError as e: | |
raise SystemExit(e) | |
with outfile: | |
json.dump(obj, outfile, sort_keys=sort_keys, indent=4) | |
outfile.write('\n') | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Changes I'd like to make:
json.dump()
call should also have the often-used "separators=(',', ': ')" argument to prevent trailing whitespace after commas.