python - json.loads() 中的无效\转义,python 2.7

标签 python json io character-encoding

我在文本文件中有一个 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)。

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

最佳答案

好吧,您必须进行一些字符串操作才能转义和解码。

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

如果它是转义的 Unicode,您可以简单地执行以下操作:

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

如果转义 8 位“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".

关于python - json.loads() 中的无效\转义,python 2.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38931535/

相关文章:

python - 是否可以在简化 map 的过程中可视化映射器结果?

Python 二进制文件 CTime 4 字节

javascript - 使用现有对象属性创建 JavaScript 对象

javascript - JSON-Schema Draft-04 - OneOf 需要

java.io API : list method

Python:写入大文件时,保持文件打开或打开它并根据需要附加到它?

python - wx.lib.editor 中的线程

python - Python 中的 id() 函数

java - spring restTemplate动态映射

c# - 在另一个用户和域下打开共享文件?