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