【发布时间】:2016-11-01 20:23:30
【问题描述】:
所以,我使用 API 调用来获取一些 json 数据,并且我使用 for 循环使用多个 id 执行调用,这将根据用户的 id 返回不同的数据。所以基本上我们需要更新一些用户的权限,这样对于没有权限的用户来说,json 数据看起来有点像这样:
{"meta":{"httpStatus":"401 - Unauthorized","error":{"errorMessage":"Insufficient
permissions.","errorCode":"ARH_8.5"},"requestId":null}}
这适用于具有权限的用户:
{"result":{"elements":[{"id":"dslkjafsadl","name":"Test","ownerId"
:"sdfadfsfsda","lastModified":"2016","isActive":true},
{"id":"dsafsad","name":"Test","ownerId":"sdfasdfa","lastModified":"2016","isActive":true}],"nextPage":null},"meta":{"httpStatus":"200 - OK","requestId":"3242343"}}
所以我的问题是,如果我有很多结果,无论是否有权限,我都有很大的回应,我怎么能只从有权限的用户那里提取 id,而排除没有权限的用户。
假设响应存储在变量“data”中,而我正在寻找的 id 将存储在“requestId”中,这是我尝试过的代码:
requestId = request_id = [element['requestId'] for element in data['result']['elements']]
从这段代码中,我收到一个 TypeError,它无法识别“结果”,因为第一个响应是没有正确权限的用户。
【问题讨论】:
-
最好的方法是检查原始请求中的http状态码。假设您使用
requests库对任何资源执行GET,requests对象的status_code将包含401以表示权限被拒绝。当然,您可以使用任何其他库。如果一切都失败了,您可以使用上面的正文并检查x['meta']['httpStatus'] value。