PythonでJSONを読もうとした時のエラーに「JSONDecodeError: Expecting value」というものがありますが、これは何ですか?「値を期待している」?What?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
こういう時は、最小限の再現するデータを探索しましょう。
例えばこういうデータで、json.decoder.JSONDecodeError: Expecting value
が出ます。
>>> import json >>> json.loads('{"abc":}') >>> json.loads('[1,2,]')
値がくるはずの箇所に値が出現せず、}
や]
が先に出現してしまったということです。
この**「値がくるはず」というのが、"Expecting value"=「値を期待している」**の意味です。
大丈夫だとは思いますが、値というのは、数値型、文字列型、真偽型、配列、オブジェクト(Python的には辞書)、nullのいずれかということですよ。
>>> json.loads('{,}')
とすればjson.decoder.JSONDecodeError: Expecting property name enclosed in double quotes
つまり「ダブルクォートで括られたプロパティ名がくるはずなのにこなかった」がでます。
>>> json.loads('{"abc"}')
とすればjson.decoder.JSONDecodeError: Expecting ':' delimiter
つまり「:
がくるはずなのにこなかった」がでます。
Expecting 〜
は「〜がくるはずだと期待してたのにこなかった」「仕様上〜でなければならないのにそうなってない」だと分かりますね。
投稿2019/04/22 13:25
編集2019/04/22 13:26総合スコア11299
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
以下誤回答でしたので、お詫びします。quiquiさんの回答が正しいです。
強いて訳すなら「値を期待している」ではなく「期待される値」でしょう。
何の値かというと、例外に結び付けられた値のことです。
例外が発生するとき、例外は関連付けられた値を持つことができます。この値は例外の 引数 (argument) とも呼ばれます。引数の有無および引数の型は、例外の型に依存します。
https://docs.python.org/ja/3/tutorial/errors.html#handling-exceptions
JSONDecodeError
そのものは文字通りJSON
の読み取りに失敗しました、というエラーです。そして、解析に失敗した箇所の値を教えてくれていて、これがここで言われている「値」です。
ただし、パーサの実装の都合上、解析に失敗した(構文上の問題箇所の)厳密な位置は特定できない場合があります。だいたいの場所は出るのだが、正確にどこに問題がある、とは伝えられない場合があるということですね。そういうときに「だいたいこの辺にあるだろうから、近くを探して」と伝える意図で「Excepting value」というメッセージにしたのだと思います。
投稿2019/04/22 12:42
編集2019/04/22 13:28総合スコア30939
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。