正确工作的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)
我曾尝试使用json而非simplejson,但是遇到了以下错误:
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: Expecting value: line 1 column 1 (char 0)
基本上,我在两种情况下都使用了相同的代码来获取json响应,但第二个json响应有什么问题,唯一不同的是我注意到第二个json响应的结构与第一个不同。
请提供解释以便理解此问题。
curl 'https://api.stackexchange.com/2.1/answers?order=desc&sort=activity&site=stackoverflow' | gunzip
将显示您期望的JSON。我不是Python用户,但显然一些答案提到的“requests”库可以正确处理gzipped内容。 - Joshua Taylor