2016-08-13 238 views
0

我有作为无效逸出json.loads(),蟒蛇2.7

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

现在我试图读取该文件,并将其转换成类型的字典列表,以便在一个文本文件jsons列表我可以重复使用的代码中使用这些键值对 -

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(文本)。

这是这个错误的原因,我该如何解决这个问题。

+0

是这条巨蟒2或3? – dangom

+0

@DanielG Python 2.7 – sagar

回答

0

好吧,你将不得不做一些字符串处理unescape和解码。

这取决于您的数据是否包含转义的Unicodes或转义的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". 
+0

str.decode('string_escape')函数做什么?我在文本文件中有urls,就像“https://”那样会影响到这些,请告诉我,在保存文本文件时错过了什么,因为我收到了这些错误。 – sagar

+0

'string_escape'只在反斜杠上工作。 'text.encode(“utf-8”)'不会修复你的数据 - 其他的东西正在播放 - 你可能错误地保存了字符串的'repr()' –