diff options
author | HongWeipeng <961365124@qq.com> | 2018-11-07 10:09:32 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2018-11-07 10:09:32 (GMT) |
commit | f19447994983902aa88362d8fffe645f1ea2f2aa (patch) | |
tree | 28d11d764423c8838132f9f61f20fced054ddf6b /Lib/json | |
parent | 0e7497cb469b003a45a4abe4105b81ef6d0c4002 (diff) | |
download | cpython-f19447994983902aa88362d8fffe645f1ea2f2aa.zip cpython-f19447994983902aa88362d8fffe645f1ea2f2aa.tar.gz cpython-f19447994983902aa88362d8fffe645f1ea2f2aa.tar.bz2 |
bpo-31553: add --json-lines option to json.tool (#10051)
* add jsonlines option to json.tool
* code review
* fix:avoid read infile after it close
* improve doc in whatsnew 3.8
Diffstat (limited to 'Lib/json')
-rw-r--r-- | Lib/json/tool.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Lib/json/tool.py b/Lib/json/tool.py index 5932f4e..1d82bc8 100644 --- a/Lib/json/tool.py +++ b/Lib/json/tool.py @@ -26,19 +26,25 @@ def main(): 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') + parser.add_argument('--json-lines', action='store_true', default=False, + help='parse input using the jsonlines format') options = parser.parse_args() infile = options.infile or sys.stdin outfile = options.outfile or sys.stdout sort_keys = options.sort_keys - with infile: + json_lines = options.json_lines + with infile, outfile: try: - obj = json.load(infile) + if 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) + outfile.write('\n') 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__': |