【发布时间】:2021-08-19 23:33:06
【问题描述】:
所以我有来自 API 调用的 JSON 响应
{ "search": { "entry": [
{ "dn": "cn=SlackIntegration-test1,ou=metadata,ou=ibmgroups,o=ibm.com",
"attribute": [
{ "name": "admin", "value": [ "uid=052355781,c=mx,ou=bluepages,o=ibm.com" ] },
{ "name": "owner", "value": [ "uid=052355781,c=mx,ou=bluepages,o=ibm.com" ] }]
},
{ "dn": "cn=SlackIntegration-test2,ou=metadata,ou=ibmgroups,o=ibm.com",
"attribute": [
{ "name": "admin", "value": [ "uid=001753781,c=mx,ou=bluepages,o=ibm.com" ] },
{ "name": "owner", "value": [ "uid=052355781,c=mx,ou=bluepages,o=ibm.com" ] }]
},
{ "dn": "cn=SlackIntegration-pidtest,ou=metadata,ou=ibmgroups,o=ibm.com",
"attribute": [
{ "name": "admin", "value": [ "uid=000326781,c=mx,ou=bluepages,o=ibm.com" ] },
{ "name": "owner", "value": [ "uid=052355781,c=mx,ou=bluepages,o=ibm.com" ] }]
},
{ "dn": "cn=SlackIntegration-APItest,ou=metadata,ou=ibmgroups,o=ibm.com",
"attribute": [
{ "name": "owner", "value": [ "uid=052355781,c=mx,ou=bluepages,o=ibm.com" ] }]
}
],
"return": {
"code": 0,
"message": "Success",
"count": 4
}
} }
我期待有这样的 df
| index | cn | admin | owner |
|---|---|---|---|
| 0 | SlackIntegration-test1 | 052355781 | 052355781 |
| 1 | SlackIntegration-test2 | 001753781 | 052355781 |
| 2 | SlackIntegration-pidtest | 000326781 | 052355781 |
| 3 | SlackIntegration-APItest | 052355781 |
我无法规范化 json 或者如何在 json 中迭代以获得类似的东西,到目前为止我有这个代码,但它只返回这个。
def get_channel_info():
LOGGER.info("Getting channel name")
url = 'http://bluepages.ibm.com/BpHttpApisv3/slaphapi?ou=metadata,ou=ibmgroups,o=ibm.com/\
(cn=slack*).list,base/byjson?*cn&owner&admin'
# request to API
try:
res = requests.get(url)
except requests.exceptions.HTTPError:
if requests.get.status_code == 429:
LOGGER.warning("Request limit reached. Waiting 4 minutes and attempting request again.")
time.sleep(240)
res = requests.get(url)
else:
LOGGER.error('Request error occurred. HTTP Status:{:0}'.format(requests.get.status_code))
raise
if res.status_code == 200:
json_res = res.json()
json_res = json_res['search']['entry']
for row in json_res:
data = json_res[int(json_res.index(row))]['attribute']
df_band = pd.DataFrame(data)
return df_band
【问题讨论】:
标签: python json pandas dataframe