diff options
Diffstat (limited to 'Lib/json/tool.py')
-rw-r--r-- | Lib/json/tool.py | 73 |
1 files changed, 19 insertions, 54 deletions
diff --git a/Lib/json/tool.py b/Lib/json/tool.py index 6d7d9a0..fc5d749 100644 --- a/Lib/json/tool.py +++ b/Lib/json/tool.py @@ -10,65 +10,30 @@ Usage:: Expecting property name enclosed in double quotes: line 1 column 3 (char 2) """ -import argparse -import json import sys - +import json 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(encoding="utf-8"), - help='a JSON file to be validated or pretty-printed', - default=sys.stdin) - parser.add_argument('outfile', nargs='?', - type=argparse.FileType('w', encoding="utf-8"), - help='write the output of infile to outfile', - default=sys.stdout) - parser.add_argument('--sort-keys', action='store_true', default=False, - help='sort the output of dictionaries alphabetically by key') - parser.add_argument('--no-ensure-ascii', dest='ensure_ascii', action='store_false', - help='disable escaping of non-ASCII characters') - parser.add_argument('--json-lines', action='store_true', default=False, - help='parse input using the JSON Lines format. ' - 'Use with --no-indent or --compact to produce valid JSON Lines output.') - group = parser.add_mutually_exclusive_group() - group.add_argument('--indent', default=4, type=int, - help='separate items with newlines and use this number ' - 'of spaces for indentation') - group.add_argument('--tab', action='store_const', dest='indent', - const='\t', help='separate items with newlines and use ' - 'tabs for indentation') - group.add_argument('--no-indent', action='store_const', dest='indent', - const=None, - help='separate items with spaces rather than newlines') - group.add_argument('--compact', action='store_true', - help='suppress all whitespace separation (most compact)') - options = parser.parse_args() - - dump_args = { - 'sort_keys': options.sort_keys, - 'indent': options.indent, - 'ensure_ascii': options.ensure_ascii, - } - if options.compact: - dump_args['indent'] = None - dump_args['separators'] = ',', ':' - - with options.infile as infile, options.outfile as outfile: + 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: - if options.json_lines: - objs = (json.loads(line) for line in infile) - else: - objs = (json.load(infile), ) - for obj in objs: - json.dump(obj, outfile, **dump_args) - outfile.write('\n') - except ValueError as e: + obj = json.load(infile) + except ValueError, e: raise SystemExit(e) + with outfile: + json.dump(obj, outfile, sort_keys=True, + indent=4, separators=(',', ': ')) + outfile.write('\n') if __name__ == '__main__': |