1

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オブジェクトを読み込めないのはなぜですか?

4

2 に答える 2

3

JSONではなくPythonオブジェクトのリテラル表現を保存しました。

それらをでデコードすることはでき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}}}]}
于 2013-03-05T13:22:59.660 に答える
2

それはJSONファイルではありません。Python辞書の文字列バージョンを書くだけで作成されたファイルのようです。形式は似ていますが、同じではありません。

ファイルを作成するコードを表示する必要があります。json.dump(data)単に呼び出すのではなく、を使用する必要がありますstr()

于 2013-03-05T13:23:06.093 に答える