正しく機能しているjson応答:
obj = urllib.urlopen("http://www.omdbapi.com/?t=Fight Club")
response_str = obj.read()
response_json = simplejson.loads(response_str)
上記のコードは、次のようなjsonリクエストを作成します:
{
"Title":"Fight Club",
"Year":"1999",
"Rated":"R",
"Released":"15 Oct 1999",
......
"Response":"True"
}
これで寝れます…でも
正しく機能していない json 応答:
obj = urllib.urlopen("https://api.stackexchange.com/2.1/answers?order=desc&sort=activity&site=stackoverflow")
response_str = obj.read()
response_json = simplejson.loads(response_str)
上記のコードは、次のようなjsonリクエストを作成します:
{
"items": [
{
"question_id": 18384375,
"answer_id": 18388044,
"creation_date": 1377195687,
"last_activity_date": 1377195687,
"score": 0,
"is_accepted": false,
"owner": {
"user_id": 1745001,
"display_name": "Ed Morton",
"reputation": 10453,
"user_type": "registered",
"profile_image": "https://www.gravatar.com/avatar/99a3ebae89496eb16afe453aae97f5be?s=128&d=identicon&r=PG",
"link": "https://stackoverflow.com/users/1745001/ed-morton"
}
},
{
"question_id": 18387447,
"answer_id": 18388040,
"creation_date": 1377195667,
"last_activity_date": 1377195667,
"score": 0,
"is_accepted": false,
"owner": {
"user_id": 2494429,
"display_name": "kpark91",
"reputation": 140,
"user_type": "registered",
"profile_image": "https://www.gravatar.com/avatar/d903a03e7c5b6d9b21ff598c632de575?s=128&d=identicon&r=PG",
"link": "https://stackoverflow.com/users/2494429/kpark91"
}
}
]
}
戻り値
JSONDecodeError at /
No JSON object could be decoded: line 1 column 0 (char 0)
simplejson を使用する代わりに、次のエラーが発生した json を試しました:
ValueError at /
No JSON object could be decoded
私が試して失敗したこと:
同じ問題を抱えているstackoverflowで質問の回答を試しましたが、明確な解決策はありませんでしたが、すべてが何らかの形で私を助けてくれました
1)jsonコンテンツのエンコーディングが正しいかどうかを確認しました
>>obj.info()
Content-Type: application/json;
charset=utf-8
Content-Length: 2398
2) utf-8 で response_str をデコードしました
json.loads(response_str).decode("utf-8")
3) jsonlint を使用して、json 応答の形式を確認しました
Parse error on line 1:
^
Expecting '{', '['
驚くべきことに、のリンクをたどると私の睡眠が救われました。 JSONDecodeError: 期待値: 行 1 列 1 (文字 0)
基本的に、両方のケースで正確なコードを使用して json 応答を取得していましたが、2 番目の json 応答の何が問題なのか、2 番目の json 応答の構造が最初のものとは異なることに気付いただけです。
問題を理解するための説明を提供してください。