【问题标题】:Simplejson dumps char \Simplejson 转储字符 \
【发布时间】:2010-05-03 20:52:28
【问题描述】:
我在用 Django 编程需要将一个对象序列化为一个字符串,但我需要将字符串 \/ 序列化。
一个例子:
simplejson.dumps({'id' : 'root\/leaf'})
我需要这样的输出:
{"id": "root\/leaf"}
但我明白了:
{"id": "root\\\\\\\\leaf"}
【问题讨论】:
标签:
django
json
serialization
simplejson
【解决方案1】:
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 使用 \/ 而不是 / 来编码 /。