【发布时间】:2022-01-18 13:55:28
【问题描述】:
我有以下代码
import requests
import json
import sys
credentials_User=sys.argv[1]
credentials_Password=sys.argv[2]
email=sys.argv[3]
def auth_api(login_User,login_Password,):
gooddata_user=login_User
gooddata_password=login_Password
body = json.dumps({
"postUserLogin":{
"login": gooddata_user,
"password": gooddata_password,
"remember":1,
"verify_level":0
}
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
url="https://reports.domain.com/gdc/account/login"
response = requests.request(
"POST",
url,
headers=headers,
data=body
)
sst=response.headers.get('Set-Cookie')
return sst
def query_api(cookie,email):
url="https://reports.domain.com/gdc/account/domains/domain/users?login="+email
body={}
headers={
'Content-Type': 'application/json',
'Accept': 'application/json',
'Cookie': cookie
}
response = requests.request(
"GET",
url,
headers=headers,
data=body
)
jsonContent=[]
jsonContent.append({response.text})
accountSettings=jsonContent[0]
print(accountSettings)
cookie=auth_api(credentials_User,credentials_Password)
profilehash=query_api(cookie,email)
代码本身工作并向 Gooddata API 发送请求。
query_api() 函数返回类似于下面的 JSON
{
"accountSettings": {
"items": [
{
"accountSetting": {
"login": "user@example.com",
"email": "user@example.com",
"firstName": "First Name",
"lastName": "Last Name",
"companyName": "Company Name",
"position": "Data Analyst",
"created": "2020-01-08 15:44:23",
"updated": "2020-01-08 15:44:23",
"timezone": null,
"country": "United States",
"phoneNumber": "(425) 555-1111",
"old_password": "secret$123",
"password": "secret$234",
"verifyPassword": "secret$234",
"authenticationModes": [
"SSO"
],
"ssoProvider": "sso-domain.com",
"language": "en-US",
"ipWhitelist": [
"127.0.0.1"
],
"links": {
"projects": "/gdc/account/profile/{profile_id}/projects",
"self": "/gdc/account/profile/{profile_id}",
"domain": "/gdc/domains/default",
"auditEvents": "/gdc/account/profile/{profile_id}/auditEvents"
},
"effectiveIpWhitelist": "[ 127.0.0.1 ]"
}
}
],
"paging": {
"offset": 20,
"count": 100,
"next": "/gdc/uri?offset=100"
}
}
}
我遇到的问题是从这个 JSON Dict 中读取特定的键,我可以使用 accountSettings=jsonContent[0] 但这只会返回相同的 JSON。
我想要做的是读取project 中links 键的值
我将如何使用 dict 执行此操作?
谢谢
【问题讨论】:
-
对我来说,你在做什么并不是很清楚。既不是您的输入,也不是您的代码对它的作用。请提供一个minimal reproducible example,人们可以直接运行。
-
@UlrichEckhardt 反映我确实同意,我现在已经更新了原始问题。谢谢
-
没有凭据我无法运行它...无论如何,是实际请求还是对结果的处理给您带来了问题?这是您在提取minimal reproducible example时需要解决的一个重要部分!
-
jsonContent.append({response.text})实际上并不解析 JSON。您应该改用jsonContent = response.json。之后,您可以像处理来自其他任何地方的结构化数据一样处理结构化数据。