我的JSON对象有什么问题?
我写了一个JSON对象(这个对象是别人生成的,我没有办法查看那段代码),然后把它保存到了一个叫做kommscache.json
的文件里,现在我想在Python中把它读回来。
我做的操作是这样的:
import json
from pprint import pprint
with open('kommscache.json') as data_file:
data = json.load(data_file)
pprint(data)
在调用json.load()
的时候,我收到了以下错误信息:
Traceback (most recent call last):
File "./kladd.py", line 7, in <module>
data = json.load(data_file)
File "/usr/lib/python2.7/json/__init__.py", line 280, in load
**kw)
File "/usr/lib/python2.7/json/__init__.py", line 328, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 381, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)
这个JSON文件的前几行看起来是这样的(我也试过不格式化的版本,结果一样):
{u'filtered': 458,
u'items': [{u'comment_count': 0,
u'current_revision': {u'created_by': {u'avatar': 19435601,
很遗憾,我不能给你看整个文件,因为里面有一些敏感数据(而且文件超过6000行...),但如果我没理解错错误信息的话,错误应该是在文件的开头。不过,我看不出这个JSON语法哪里不对。我仔细检查过,这段代码里的所有大括号和方括号都有配对的闭合符号。
为什么我不能加载这个JSON对象呢?
2 个回答
3
你保存的是Python对象的字面表示,而不是JSON格式。
你可以用 ast.literal_eval()
来解码这些内容,但你可能更想修正一下你的JSON写入代码。确保在保存数据时使用 json.dumps()
。
使用 ast.literal_eval()
(在关闭所有大括号后):
>>> import ast
>>> ast.literal_eval('''\
... {u'filtered': 458,
... u'items': [{u'comment_count': 0,
... u'current_revision': {u'created_by': {u'avatar': 19435601,
... }}}]}''')
{u'filtered': 458, u'items': [{u'comment_count': 0, u'current_revision': {u'created_by': {u'avatar': 19435601}}}]}
2
这不是一个JSON文件。看起来这个文件是通过直接写出一个Python字典的字符串版本来创建的。虽然它们的格式看起来相似,但实际上并不一样。
你应该展示一下创建这个文件的代码。你需要使用 json.dump(data)
,而不是简单地调用 str()
。