diff --git a/Doc/library/json.rst b/Doc/library/json.rst index f9547cb3587..bdb6436e98d 100644 --- a/Doc/library/json.rst +++ b/Doc/library/json.rst @@ -42,7 +42,8 @@ Compact encoding:: Pretty printing:: >>> import json - >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) + >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, + ... indent=4, separators=(',', ': '))) { "4": 5, "6": 7 @@ -155,6 +156,12 @@ Basic Usage .. versionchanged:: 3.2 Allow strings for *indent* in addition to integers. + .. note:: + + Since the default item separator is ``', '``, the output might include + trailing whitespace when *indent* is specified. You can use + ``separators=(',', ': ')`` to avoid this. + If *separators* is an ``(item_separator, dict_separator)`` tuple, then it will be used instead of the default ``(', ', ': ')`` separators. ``(',', ':')`` is the most compact JSON representation. @@ -393,6 +400,12 @@ Encoders and Decoders .. versionchanged:: 3.2 Allow strings for *indent* in addition to integers. + .. note:: + + Since the default item separator is ``', '``, the output might include + trailing whitespace when *indent* is specified. You can use + ``separators=(',', ': ')`` to avoid this. + If specified, *separators* should be an ``(item_separator, key_separator)`` tuple. The default is ``(', ', ': ')``. To get the most compact JSON representation, you should specify ``(',', ':')`` to eliminate whitespace. diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py index 86a7a3e50a6..44f49c4247f 100644 --- a/Lib/json/__init__.py +++ b/Lib/json/__init__.py @@ -39,8 +39,8 @@ Compact encoding:: Pretty printing:: >>> import json - >>> s = json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4) - >>> print('\n'.join([l.rstrip() for l in s.splitlines()])) + >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, + ... indent=4, separators=(',', ': '))) { "4": 5, "6": 7 @@ -146,7 +146,9 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, If ``indent`` is a non-negative integer, then JSON array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. ``None`` is the most compact - representation. + representation. Since the default item separator is ``', '``, the + output might include trailing whitespace when ``indent`` is specified. + You can use ``separators=(',', ': ')`` to avoid this. If ``separators`` is an ``(item_separator, dict_separator)`` tuple then it will be used instead of the default ``(', ', ': ')`` separators. @@ -207,7 +209,9 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, If ``indent`` is a non-negative integer, then JSON array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. ``None`` is the most compact - representation. + representation. Since the default item separator is ``', '``, the + output might include trailing whitespace when ``indent`` is specified. + You can use ``separators=(',', ': ')`` to avoid this. If ``separators`` is an ``(item_separator, dict_separator)`` tuple then it will be used instead of the default ``(', ', ': ')`` separators. diff --git a/Lib/json/encoder.py b/Lib/json/encoder.py index 75b7f494b3f..e1ed21f6e70 100644 --- a/Lib/json/encoder.py +++ b/Lib/json/encoder.py @@ -125,7 +125,10 @@ class JSONEncoder(object): If indent is a non-negative integer, then JSON array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. - None is the most compact representation. + None is the most compact representation. Since the default + item separator is ', ', the output might include trailing + whitespace when indent is specified. You can use + separators=(',', ': ') to avoid this. If specified, separators should be a (item_separator, key_separator) tuple. The default is (', ', ': '). To get the most compact JSON