Skip to main content
 首页 » 编程设计

python之要在 python 中加载的 .json 文件的格式

2025年05月04日1652php

这是我的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文件!