【问题标题】: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 使用 \/ 而不是 / 来编码 /。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多