【问题标题】:Load JSON file in Python without the 'u in the key在没有 'u 键的情况下在 Python 中加载 JSON 文件
【发布时间】:2014-03-08 15:06:48
【问题描述】:

我在 Python 中使用图形进行了一些工作,并希望将一些结构保存在文件中,以便在我恢复工作时可以快速加载它们。其中之一是我使用 json.dump 以 JSON 格式保存的字典。

当我用 json.load 重新加载它时,键已从“1”变为 u'1'。这是为什么?这是什么意思?我怎样才能改变它?稍后我会使用键来制作一些列表,然后将其与原始图一起使用,哪些节点是键(以整数形式),这会导致比较问题...

【问题讨论】:

  • 不确定这真的是一个问题,在 JSON 中加载的字符串是 unicode,所以 u'1' = '1' 来证明在你的解释器中尝试 u'1' == '1'。您应该能够毫无问题地操作对象以将它们改回 int(key) 并且它将返回您的整数
  • 嗯,那我可能做错了什么……谢谢大家的澄清。

标签: python json


【解决方案1】:

u 前缀表示 Unicode 字符串。在 Python 2.x 中,您可以使用 str() 将其转换为常规字符串。不过,这实际上不是必需的。 u'1' == '1' 因为 Python 会在比较之前为你做任何转换。

【讨论】:

  • str() 将使用 ASCII 隐式编码 unicode 值;最好使用.encode('utf8');例如显式编码,但前提是你真的需要一个字节字符串.
  • 鉴于原始输入应该是字节字符串,我认为往返是安全的;但当然,你是对的,像往常一样。
【解决方案2】:

u'' 或 u"" 仅表示这是一个 unicode 字符串。除非您需要字节字符串,否则这通常不会有任何问题。虽然我希望您的原始数据已经是 unicode,所以这应该不是问题。

【讨论】:

    【解决方案3】:

    这是一个 unicode 字符串。在大多数情况下,您可以将其视为普通的 python 字符串。如果您真的想将其转换为普通字符串,请使用 str()。如果需要转成bytes类型,使用object.encode(encoding),其中encoding是Unicode字符的编码,一般是'utf-8 '.

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 1970-01-01
      • 2013-03-14
      • 2017-11-02
      • 2012-06-11
      • 2020-09-12
      • 2012-03-11
      • 2010-09-24
      相关资源
      最近更新 更多