diff options
author | Daniel Himmelstein <daniel.himmelstein@gmail.com> | 2019-12-04 06:15:19 (GMT) |
---|---|---|
committer | Inada Naoki <songofacandy@gmail.com> | 2019-12-04 06:15:19 (GMT) |
commit | 03257949bc02a4afdf2ea1eb07a73f8128129579 (patch) | |
tree | ceaf3976e56c1258505bd8b0a13221b99c69f34f /Lib/json | |
parent | eb48a451e3844185b9a8751c9badffbddc89689d (diff) | |
download | cpython-03257949bc02a4afdf2ea1eb07a73f8128129579.zip cpython-03257949bc02a4afdf2ea1eb07a73f8128129579.tar.gz cpython-03257949bc02a4afdf2ea1eb07a73f8128129579.tar.bz2 |
bpo-29636: Add --(no-)indent arguments to json.tool (GH-345)
Diffstat (limited to 'Lib/json')
-rw-r--r-- | Lib/json/tool.py | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/Lib/json/tool.py b/Lib/json/tool.py index b3ef992..6c687d7 100644 --- a/Lib/json/tool.py +++ b/Lib/json/tool.py @@ -30,20 +30,36 @@ def main(): help='sort the output of dictionaries alphabetically by key') parser.add_argument('--json-lines', action='store_true', default=False, help='parse input using the jsonlines format') + 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() - infile = options.infile - outfile = options.outfile - sort_keys = options.sort_keys - json_lines = options.json_lines - with infile, outfile: + dump_args = { + 'sort_keys': options.sort_keys, + 'indent': options.indent, + } + if options.compact: + dump_args['indent'] = None + dump_args['separators'] = ',', ':' + + with options.infile as infile, options.outfile as outfile: try: - if json_lines: + 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, sort_keys=sort_keys, indent=4) + json.dump(obj, outfile, **dump_args) outfile.write('\n') except ValueError as e: raise SystemExit(e) |