Edited at

python2とpython3でjson.dumpsのインデントの挙動が違う

More than 1 year has passed since last update.

python2.7とpython3.6でindentオプションを指定した時のjson.dumpsの挙動が違う。python2だと改行コードの前にスペースが一つはいっているが、python3だとはいっていない。


実験


コード

import json

json.dumps({"name": 'aaa', "age": 21}, sort_keys=True, indent=2)


結果


python2.7.8

'{\n  "age": 21, \n  "name": "aaa"\n}'


python3.6.0

> '{\n  "age": 21,\n  "name": "aaa"\n}'


原因と対応


原因

Issue 16333: Trailing whitespace in json dump when using indent - Python tracker


対策

separators=(',',': ')をjson.dumpsのオプションに追加する。

import json

json.dumps({"name": 'aaa', "age": 21}, sort_keys=True, indent=2, separators=(',', ': '))