我的JSON对象有什么问题?

时间:2013-03-05 13:21:08

标签: python json syntax

我已经在一个名为kommscache.json的文件中编写了一个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 个答案:

答案 0 :(得分: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}}}]}

答案 1 :(得分:2)

这不是JSON文件。它似乎是通过简单地编写Python字典的字符串版本而创建的文件。虽然格式相似,但它们并不相同。

您应该显示创建该文件的代码。您需要使用json.dump(data)而不是简单地调用str()