【问题标题】:Passing Unicode string from Python dict to JSON将 Unicode 字符串从 Python dict 传递到 JSON
【发布时间】:2016-05-09 15:52:03
【问题描述】:

我有一个包含一些 Unicode 字符串(以及其他对象)的字典。我想将此字典保存为 JSON 文件,然后通过 AJAX 显示其内容。

如果final_res 是字典,我通常会这样做:

json.dumps(final_res, ensure_ascii=True)

在结果中,我看到如下字符串:

"l\\u00a0m\\u00fcdale"

我想这些是 unicode 编码的字符。但是当我尝试在 Javascript 中显示它们时,它们会以斜线而不是编码的 unicode 字母打印。

为了正确显示这些,我在 Javascript 中做错了什么吗?或者我应该在输出到 JSON 之前在 Python 中将这些解码为 ASCII?

更新:

根据下面 cmets 中与 @spectra 的讨论,我意识到 json.dumps 不应该输出双斜杠。当我在浏览器中解析它时,它会将其打印为文字单斜杠。

我正在想办法用json 模块解决这个问题,但不知道为什么会这样。

【问题讨论】:

  • 你用什么将结果发送到浏览器?
  • 我看到字符串打印为"l\\u00a0m\\u00fcdale"
  • 你为什么使用ensure_ascii=True?你是如何在 Javascript 端解析 JSON 的?如果您只显示原始 JSON 字符串,您当然会在其中获得 Unicode 转义,但如果您实际解析并使用 JSON,则应该由解析器将转义处理为 Unicode。
  • @user1496984> 我明白了。我要问的是如何将字符串发送到浏览器。你在使用 Django 吗?烧瓶?一些自定义代码?
  • @user2357112 我使用react-refetch 解析它。我不是简单地转储 AJAX 调用的结果,而是打印出原始 final_res dict 的相关项,如在 final_refetch[0]['name'] 中,它仍然有反斜杠..

标签: javascript python json unicode


【解决方案1】:

我的解决方案是使用“单斜杠”版本将json.dumps 的结果保存到数据库中。我通过在 json.dumps 的结果上调用 print 来做到这一点,然后将其复制粘贴到数据库中。

【讨论】:

  • 如果您只是在解释器中将其可视化,请记住使用 print。否则,解释器重新转义字符串。这是因为它不显示字符串本身,而是为您提供一些可以复制粘贴到 python 中以重新创建它的内容。
【解决方案2】:

您可以将 json 文件编码为 UTF8 而不是转义字符:

json.dumps(final_res,ensure_ascii=False).encode('utf8')

例如

print json.dumps({'name':u'l\u00a0m\u00fcdale'},ensure_ascii=False).encode('utf8')
# {"name": "l müdale"}

然后在您的客户端 AJAX 代码中,将编码设置为 'utf8' : How to set encoding in .getJSON JQuery

$.ajax({ contentType: "application/json; charset=utf-8", ... })

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2015-10-10
    • 2020-05-28
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多