私の最善の推測は、それ自体が有効な JSON ではないということです。これにより、毎回スローされ、それまでに常に例外がスローされているため、ValueError
到達することはありません。data.append(...)
ファイル全体が次のような JSON 配列の場合:
[
{
"direction": "left",
"time": 1
},
{
"direction": "right",
"time": 2
}
]
次に、次のようなものを簡単に使用できます。
with open('output.json', 'r') as f:
data = json.load(f)
ただし、JSON オブジェクトまたは配列内に含まれていない最上位レベルの JSON アイテムの束である場合は、次のようになります。
{
"direction": "left",
"time": 1
}
{
"direction": "right",
"time": 2
}
次に、別のアプローチを使用する必要があります: アイテムを 1 つずつデコードします。残念ながら、データをストリーミングすることはできないため、最初にすべてのデータを一度にロードする必要があります。
with open('output.json', 'r') as f:
json_data = f.read()
単一のアイテムを解析するには、 を使用しますdecode_raw
。つまり、以下を作成する必要がありますJSONDecoder
。
decoder = json.JSONDecoder()
次に、文字列の左側にある空白を取り除き、アイテムがまだあることを確認し、アイテムを解析します。
while json_data.strip(): # while there's still non-whitespace...
# strip off whitespace on the left side of the string
json_data = json_data.lstrip()
# and parse an item, setting the new data to be whatever's left
item, json_data = decoder.parse_raw(json_data)
# ...and then append that item to our list
data.append(item)
このように大量のデータ収集を行っている場合は、データベースに保存する価値があるかもしれません。SQLiteのような単純なもので十分です。データベースを使用すると、効率的な方法で集計統計を簡単に実行できます。(それが設計の目的です!) また、JSON を頻繁に解析するよりも頻繁にデータにアクセスする方が、データへのアクセスが高速になる可能性があります。