Python

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=(',', ': '))