【问题标题】:Invalid \escape in json.loads(), python 2.7json.loads() 中的 \escape 无效,python 2.7
【发布时间】:2016-08-13 09:59:00
【问题描述】:

我在一个文本文件中有一个 json 列表作为

[{"key1": "value1", "key2": "value2"},{},{}]

现在我正在尝试读取文件并将其转换为字典列表,以便我可以使用代码迭代和使用这些键值对 -

with open('./file.txt') as f:
   listOfDict= json.load(f)

我收到错误 -

ValueError: Invalid \escape: line 1 column 2005707 (char 2005706)

我认为这可能是因为一些价值观就像 - 例如。 {"key1":"ENERGIZER\xc2"}

我在写入此文件时忘记使用 text.encode("utf-8")。 相反,我在写入文件时使用了 str(text)。

这是此错误的原因吗?我该如何解决此问题。

【问题讨论】:

  • 这是 python 2 还是 3?
  • @DanielG Python 2.7

标签: python json io character-encoding


【解决方案1】:

好的,你必须做一些字符串操作来取消转义和解码。

这取决于您的数据是否包含转义的 Unicode 或转义的 8 位字符集,例如 latin1cp1252。您必须进行试验,看看哪些方法对您的数据有效。

如果它是转义的 Unicode,你可以简单地这样做:

import io
with io.open('./file.txt', 'r', encoding='unicode_escape') as f:
    listOfDict= json.load(f)

如果转义了 8bit 'latin1',你需要这样做:

with open('./file.txt', 'r') as f:
    # read, convert escape to byte, convert bytes as 'latin1'
    decoded_json = f.read().decode('string_escape').decode('latin1')
    listOfDict = json.loads(decoded_json) # Note the "s".

【讨论】:

  • str.decode('string_escape') 函数是做什么的?我在文本文件中有 url,例如“https://”,这也会影响那些,还请告诉我在保存文本文件时错过了什么,因为我收到了这些错误。
  • string_escape 仅适用于反斜杠。 text.encode("utf-8") 不会修复您的数据 - 有别的东西在起作用 - 您可能错误地保存了字符串的 repr()
猜你喜欢
  • 2021-08-18
  • 2014-09-06
  • 2014-04-19
  • 2018-06-12
  • 2012-11-18
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多