我的JSON对象有什么问题?

1 投票
2 回答
1794 浏览
提问于 2025-04-17 17:59

我写了一个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()

撰写回答