JSON响应字符串中的字符反转义

10

我发起了一个JSON请求,得到了一个使用Unicode字符编码的字符串,看起来像这样:

s = "\u003Cp\u003E"

我希望将它转换为:

s = "<p>"

在Python中,最好的方法是什么?

注意,这与这个问题相同,只不过是在Python而不是Ruby中。我还使用了Posterous API

3个回答

18

如果数据来自JSON,那么json模块应该已经为您解码了这些转义字符:

>>> import json
>>> json.loads('"\u003Cp\u003E"')
u'<p>'

我希望我能将这两个答案都标记为正确。谢谢你的帮助! - Spike
@Spike:如果输入是JSON格式,这就是正确的答案。Python字符串字面量与JSON字符串字面量并不完全兼容,而unicode-escape对于超出基本多文种平面(JS/JSON存储为代理项,但Python可能不是)的字符可能会返回错误的结果。 - bobince

17
>>> "\\u003Cp\\u003E".decode('unicode-escape')
u'<p>'

1

编辑:原问题“使用Python取消转义字符串中的字符”没有澄清字符串是要被写入还是要被读取(后来添加了“JSON响应”一词,以澄清意图是读取)。

因此,我回答了相反的问题:如何将JSON序列化数据写入未转义的字符串中(而不是从字符串加载数据)。

我的用例是从自己的数据字典生成JSON文件,但该文件包含已转义的非ASCII字符。所以我像这样做:

with open(filename,'w') as jsonfile:
    jsonstr = json.dumps(myDictionary, ensure_ascii=False)
    print(jsonstr)          # to screen
    jsonfile.write(jsonstr) # to file

如果ensure_ascii为真(默认值),输出将保证对所有输入的非ASCII字符进行转义。如果ensure_ascii为假,则这些字符将按原样输出。
来自这里:https://docs.python.org/3/library/json.html

提醒:我编辑了这个(哇,几乎十年前的)问题,并结合您的回答,删除了一些额外的介绍 - 如果您认为这不合适,请随时恢复! - ti7
感谢 @ti7,我想澄清这个答案是在你修改原标题之前写的。 - abu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接