[Python3]「json.decoder.JSONDecodeError: Expecting value ~」ってエラーに遭遇した時の対処法

   2020/07/26

Pythonで.jsonのファイルを読み込んでデータをパースしようとしたんだけど、下のエラーが出た。

json.decoder.JSONDecodeError: Expecting value: line 1 column 19 (char 18)

JSONファイルは以下のような感じで書いてあるんだけど、どうも「True」の箇所でエラーが起きているらしい。

{"domain": "hoge.jp", "httpOnly": True, ~(後略)~

色々サイトを調べて回ってみたけど、ちらほらと対処法みたいのものが見つかるものの、どれも解決には導いてくれなかったので自力で解決する事にになった。

とりあえずエラーの原因として考えられたのは、Trueが値として認識されてないという事。
Trueがダブルクオーテーションに囲まれてないからエラーになるのではないかと。
でも違った。なぜなら数値はダブルクオーテーションに囲まれてなくても普通にパースされていたから。

結局何が原因だったかというと、「True」ではなく「true」でないとパースできないという仕様が原因だったらしい。
まじかよ・・・Pythonなのに小文字のtrueなの・・・
ていうか、APIから直接取得したJSONデータだとTrueのままでもちゃんとパースできたじゃんかよ。
なんでファイルからだとうまくいかないんだろ。
APIの時は成功してた事もあって原因特定に時間がかかってしまった。

とりあえずパースする際は、

とすれば大丈夫。

ちなみに「.replace("'", '"')」としているのは、JSONの値がシングルクオートで囲まれていた場合エラーが発生するから。
ダブルクオーテーションで囲んでおけば安全。
但し、値の中にシングルクオーテーションが入っている場合はreplaceすると値が変わってしまうので注意!

タイトルとURLをコピーしました

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

17 + fourteen =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください