2012-01-30 202 views
0

我試圖解碼,然後解析一個JSON文件大約9MB。 但是當我嘗試解碼JSON文件,使之成爲一個Python字典對象我得到的錯誤:Python JSON解碼部分文件

'utf8' codec can't decode bytes in position 3161744-3161747: invalid data

我認爲這可能是由於編碼/解碼的問題,但我不能完全肯定。我不知道什麼文件正在編碼,因爲我從第三方獲取它,但不幸的是我無法顯示該文件,因爲它包含敏感信息。

另外,提供JSON文件的人表示這是一個有效的JSON文件並且傳遞了json lint。 這裏是我下面的代碼:

import json 

""" JSON Parser """ 
class parser: 
    json_file = None 

    """ The JSON File name""" 
    def json_object(self, file): 
     self.json_file = file 

    """ Open up file and parse it """ 
    def json_encode(self): 
     try: 
      json_data = open(self.json_file) 
      data = json_data.read().decode('utf8') 
      result = json.loads(data) 
     except Exception as e: 
      result = e 
     return result 

""" Instantiate parser and begin parsing the file""" 
p = parser() 
p.json_object('file.js') 
print p.json_encode() 
+3

儘管文件可以適當從一個JSON點被格式化,它仍可以是從一個UTF-8編碼點無效。您應該能夠通過將文件讀取爲UTF-8文本文件來引發相同的錯誤,這將消除JSON的問題。你確定該文件是UTF-8編碼,而不是像ISO 8859-1? – 2012-01-30 21:07:34

+0

@GregHewgill我不確定,這是問題所在,我可以在文本編輯器中以UTF-8編碼格式打開它,然後保存它。然後當我運行解析器時,我只能得到編碼的json文件的最後部分。當我嘗試在PHP中發生同樣的問題。這是一個非常奇怪的問題,但是,我仍然認爲它首先與文件的編碼方式有關。 – Vlad 2012-01-30 21:27:25

+0

你可以讀取文件,然後嘗試'數據[3161730:3161760]'看看是什麼導致了錯誤? – 2012-01-30 21:57:21

回答

1

我不認爲你應該使用UTF-8在閱讀它之前解碼的Json應該是透明的編碼,你可能會在一些JSON字符串是UTF-8和其他的,拉丁-9等嘗試:

json.load(open(self.json_file)) 
+0

我已經試過了。我得到的錯誤是「'utf8'編解碼器無法解碼位置45-48中的字節:無效數據」。我不知道如何檢查那些字節位置中的字符 – Vlad 2012-01-31 16:11:20