【问题标题】:How do I get rid of the "u" from a decoded JSON object?如何从解码的 JSON 对象中删除“u”?
【发布时间】:2011-07-15 20:07:23
【问题描述】:

我有一本 Python 字典:

d = {"a11y_firesafety.html":{"lang:hi": {"div1": "http://a11y.in/a11y/idea/a11y_firesafety.html:hi"}, "lang:kn": {"div1": "http://a11y.in/a11ypi/idea/a11y_firesafety.html:kn}}}

我在 JSON 文件中保存了它,并使用 json.dumps() 对其进行了编码。现在,当我在 Python 中使用 json.loads() 对其进行解码时,我得到如下结果:

temp = {u'a11y_firesafety.html': {u'lang:hi': {u'div1': u'http://a11y.in/a11ypi/idea/a11y_firesafety.html:hi'}, u'lang:kn': {u'div1': u'http://a11y.in/a11ypi/idea/a11y_firesafety.html:kn'}}}

我的问题在于“u”,它表示我的临时文件(字典词典)中每个项目前面的 Unicode 编码。如何摆脱那个“你”?

【问题讨论】:

  • 你为什么需要它?只是为了比较两个字典的另一个目的?
  • 你在json.loads()之后得到的unicode字符串对你来说真的是个问题吗?
  • 你可以升级到 Python 3,它不再有这样的区别。 :-)

标签: python


【解决方案1】:

您为什么关心“u”字符?它们只是一个视觉指标;除非您实际上在代码中使用 str(temp) 的结果,否则它们对您的代码没有影响。例如:

>>> test = u"abcd"
>>> test == "abcd"
True

如果它们出于某种原因确实很重要,并且您不关心无法在国际环境中使用此代码等后果,那么您可以传入自定义 object_hook(请参阅此处的 json 文档) 来生成包含字符串内容而不是 unicode 的字典。

【讨论】:

  • 但是有没有办法摆脱它们?
  • 对我来说,我很在意,因为我想将其复制并粘贴到文本编辑器并格式化结果。
【解决方案2】:

你也可以这样用:

import fileinput

fout = open("out.txt", 'a')

for i in fileinput.input("in.txt"):

   str = i.replace("u\"","\"").replace("u\'","\'")

   print >> fout,str

来自标准网站的典型 json 响应具有这两种编码表示 - u' 和 u" 这个 sn-p 摆脱了他们两个。可能不需要,因为这种编码不会妨碍任何逻辑处理,正如之前的评论者所提到的那样

【讨论】:

  • 在尝试了所有的解码和编码选项后,这个只帮了我:)
  • 我想出了一种更简单、更可靠/更明智的方法。只需使用 json.dumps(resp) ,其中 resp 是您的 api 响应。注意:您将需要 json 库,即“import json”。要消除尾随空格,您可以进一步添加 json.dumps(resp).strip()
【解决方案3】:

没有“unicode”编码,因为 unicode 是一种不同的数据类型,我真的不认为 unicode 会成为问题,因为您可能总是将其转换为字符串,例如foo.encode('utf-8').

但是,如果您真的想预先拥有字符串对象,您可能应该创建自己的 decoder class 并在解码 JSON 时使用它。

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 2018-07-30
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多