summaryrefslogtreecommitdiffstats
path: root/Lib/json
diff options
context:
space:
mode:
authorDaniel Himmelstein <daniel.himmelstein@gmail.com>2019-12-04 06:15:19 (GMT)
committerInada Naoki <songofacandy@gmail.com>2019-12-04 06:15:19 (GMT)
commit03257949bc02a4afdf2ea1eb07a73f8128129579 (patch)
treeceaf3976e56c1258505bd8b0a13221b99c69f34f /Lib/json
parenteb48a451e3844185b9a8751c9badffbddc89689d (diff)
downloadcpython-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.py30
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)