2016-08-13 187 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()' –