what is wrong with json response
json响应正常工作:
1 2 3 | obj = urllib.urlopen("http://www.omdbapi.com/?t=Fight Club") response_str = obj.read() response_json = simplejson.loads(response_str) |
上面的代码使json请求看起来像:
1 2 3 4 5 6 7 8 | { "Title":"Fight Club", "Year":"1999", "Rated":"R", "Released":"15 Oct 1999", ...... "Response":"True" } |
所以我现在可以睡觉了......但是
json响应无法正常工作:
1 2 3 | 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请求看起来像:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | { "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" } } ] } |
回报
1 2 | JSONDecodeError at / No JSON object could be decoded: line 1 column 0 (char 0) |
而不是使用simplejson我尝试了json,它给出了以下错误:
1 2 | ValueError at / No JSON object could be decoded |
我尝试过但失败了:
我在stackoverflow上尝试了我的问题的答案有同样的问题,但没有一个给出明确的解决方案虽然每个人都以某种方式帮助了我
1)我检查了json内容编码是否正确
1 2 3 4 5 | >>obj.info() Content-Type: application/json; charset=utf-8 Content-Length: 2398 |
2)我在utf-8中解码了response_str
1 | json.loads(response_str).decode("utf-8") |
3)我用jsonlint检查json响应的格式
1 2 3 4 | Parse error on line 1: ^ Expecting '{', '[' |
令人惊讶的是,在我获得睡眠的链接之后。
JSONDecodeError:期望值:第1行第1列(char 0)
基本上我在两种情况下都使用精确代码来获取json响应,但是第二次json响应有什么不对,只有差异我注意到第二次json响应的结构与第一次响应不同。
请提供解释以了解问题。
我来给你一些建议。 使用
这个简短的IDLE会话将证明:
1 2 3 4 5 6 7 8 9 10 11 | >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) >>> r.status_code 200 >>> r.headers['content-type'] 'application/json; charset=utf8' >>> r.encoding 'utf-8' >>> r.text u'{"type":"User"...' >>> r.json() {u'private_gists': 419, u'total_private_repos': 77, ...} |
要安装它,只需转到命令提示符和
这是一个演示视频:
你的特殊问题:
保持良好睡眠的一种方法是使用请求:
1 2 3 4 5 6 | import requests import simplejson response = requests.get("https://api.stackexchange.com/2.1/answers?order=desc&sort=activity&site=stackoverflow") response_json = simplejson.loads(response.text) print response_json |
没有错误,只是工作。
其他答案提到
1 2 3 4 5 6 | import StringIO, gzip obj = urllib.urlopen("https://api.stackexchange.com/2.1/answersorder=desc&sort=activity&site=stackoverflow") data = StringIO.StringIO(obj.read()) gzipper = gzip.GzipFile(fileobj=data) response_json = simplejson.loads(gzipper.read()) |