JSON требует, чтобы в буквальном смысле \
характер экранировать, и представлен в виде \\
. Python также представляет буквенный символ \
escaped, как \\
. Между двумя из них \
становится \\\\
.
Обратите внимание на следующее Python:
>>> "\\/" == "\/"
True
>>> {"id": "root\/leaf"} == {"id": "root\\/leaf"}
True
>>> {"id": "root\\/leaf"}["id"]
'root\\/leaf'
>>> print {"id": "root\\/leaf"}["id"]
root\/leaf
Python печатает дополнительный побег. Поэтому, когда вы делаете simplejson.dumps({"id": "root\/leaf"})
, python печатает правильный результат {'id': 'root\\/leaf'}
, но с дополнительными побегами на Python, следовательно {'id': 'root\\\\/leaf'}
. Python рассматривает каждый \\
как отдельный символ. Если вы пишете файл, а не строку, вы получите {'id': 'root\\/leaf'}
.
Edit: Я мог бы добавить, буквальный JSON {"id": "root\/leaf"}
будет декодировать в {'id': 'root/leaf'}
, как буквальный JSON \/
карты к /
характеру. И \/
, и /
действительны JSON-кодировки /
; кажется, нет простого способа сделать simplejson использовать \/
вместо /
для кодирования /
.