这是我的JSON文件
[{"": "", "User ID": "913fd663bc66a452", "Description": "", "Timestamp": "Jul 09, 2014 10:33 PM", "Session Index": "2", "Platform": "Android", "Version": "0.2.9", "Params": "{ email : soleimaniarmin@yahoo.com; comments : 09337845621; stars : 4.0; name : ari}", "Device": "Samsung Galaxy S4", "Event": "feedback"},{"": "", "User ID": "6e35346f9754b787", "Description": "", "Timestamp": "Jul 09, 2014 04:36 PM", "Session Index": "6", "Platform": "Android", "Version": "0.3.0", "Params": "{ email : eddgrow89@hotmail.com; comments : i love My live ; stars : 5.0; name : eddy}", "Device": "Alcatel One Touch 6033A", "Event": "feedback"},]
我正在尝试用 python 解析这个文件,代码如下:
import json
from pprint import pprint
with open('android/2014-07-09.json', 'rb') as json_file:
contents = json_file.read();
print contents;
data = json.loads(contents);
pprint(data);
但是当我执行它时出现以下错误..
ValueError: No JSON object could be decoded
如果我将 json.loads 替换为 json.load,则会发生以下错误。
File "messenger.py", line 9, in <module>
data = json.load(contents);
File "/usr/lib/python2.7/json/__init__.py", line 286, in load
return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'
如何解开这个谜团。
请您参考如下方法:
首先,您应该将文件发送到 json.load 而不是将字符串发送到 json.loads。存储到变量中然后将其发送到解析器是不必要的开销。
with open('android/2014-07-09.json', 'rb') as json_file:
contents = json.load(json_file)
那么,您的文件不是有效的 json 文档。您可以使用任何工具对其进行测试,例如:
在您的情况下,问题是字符串末尾的逗号,就在结束 ] 之前。不仅如此,那个 json 文件中还有一些其他的“垃圾”。例如,Params 键包含一个字符串作为值,它恰好是一个 json 文档本身,而不是一些有用的数据。尽管这是有效的 json 格式,但我想不出它适用于什么情况。
总而言之:更改 json 文档的来源:)
编辑: 正如 Martijn Pieters 指出的那样,Params 实际上不是有效的 json 字符串,尽管它看起来像那样。但是话又说回来......得到一个合适的json文件!
