summaryrefslogtreecommitdiffstats
path: root/Lib/json/tool.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/json/tool.py')
-rw-r--r--Lib/json/tool.py73
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__':