2012-01-30 171 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