diadia

興味があることをやってみる。自分のメモを残しておきます。

エラー:json.decoder.JSONDecodeError: Extra data

エラー内容とエラーが出た経緯

Traceback (most recent call last):
  File "execute.py", line 38, in <module>
    json.load(f)
  File "/anaconda3/lib/python3.6/json/__init__.py", line 299, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/anaconda3/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/anaconda3/lib/python3.6/json/decoder.py", line 342, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 20 column 2 (char 3707)
</module>

経緯:JSONモジュールをいじった際に生じた。
csvファイルからcsv.DictReader()によりdict型のデータを生成した。そのdict型データをjson.dump()関数を用いてJSONファイルに変換した。このファイルは複数のデータがJSON形式で格納されている。そしてこのJSONファイルをjson.load()関数で読み込もうとした。その際に上記のエラーが生じてしまった。

同じエラーに対処しているもの:
https://qiita.com/takugenn/items/b78f3c3bb34c5de5b5f8#json

自己検証の結果、自分の場合json.load()に渡すjsonデータが多すぎるとExtra dataとなるようだ。json.load()に渡す引数をJSONデータ一つずつイテレートするとエラーを避けることができた。

結論

json.load関数を使う場合一つずつ読み込まなければならない。