通过RESTAPI调用下载特定JSON键值数据的Python代码

2024-04-28 00:16:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python编写一段代码,只下载调用中的特定键值

因此,解决方案可能是

  1. 下载原始数据,然后通过正则表达式或 2) 在API中应用特定进程会调用自身,只下载并附加“值”

注意-不包括访问令牌的代码

邮递员给我的基本密码是

url = "https://xyz-stg.csod.com/services/api/x/odata/api/views/vw_rpt_performance_comment"

payload={}
headers = {
  'Authorization': 'Bearer ' + access_token,
  'Cookie': 'ASP.NET_SessionId=hsylq0qqp; Cookie_2=value'
}

response = requests.request("GET", url, headers=headers, data=payload).json()

print(response, file=open(r"C:\Users\path\Desktop\Python script\output.json", 'w', encoding='utf-8', errors='ignore'))


while response['@odata.nextLink']:
    url = response['@odata.nextLink']
    response = requests.request("GET", url, headers=headers, data=payload).json()
    #response.extend(response)


    print(response, file=open(r"C:\Users\path\Desktop\Python script\output.json", 'a', encoding='utf-8', errors='ignore'))
    break

原始json输出数据

*{ "@odata.context": "https://example.com/services/api/x/odata/api/views/$metadata#vw_rpt_review_response_comment", "value": [ { "pr_comment_id": 1, "pr_comment": "Test Comment" }, { "pr_comment_id": 2, "pr_comment": "Test Comment" }, { "pr_comment_id": 3, "pr_comment": "Test Comment" } ],
"@odata.nextLink": "https://example.com/services/api/x/odata/api/views/$metadata#vw_rpt_review_response_comment?$skip=1000"
} { "@odata.context": "https://example.com/services/api/x/odata/api/views/$metadata#vw_rpt_review_response_comment", "value": [ { "pr_comment_id": 4, "pr_comment": "Test Comment" }, { "pr_comment_id": 5, "pr_comment": "Test Comment" }, { "pr_comment_id": 6, "pr_comment": "Test Comment" } ],
"@odata.nextLink": "https://example.com/services/api/x/odata/api/views/$metadata#vw_rpt_review_response_comment?$skip=2000"
}*

Beautify json

所需输出

*{ "value": [ { "pr_comment_id": 1, "pr_comment": "Test Comment" }, { "pr_comment_id": 2, "pr_comment": "Test Comment" }, { "pr_comment_id": 3, "pr_comment": "Test Comment" } , { "pr_comment_id": 4, "pr_comment": "Test Comment" }, { "pr_comment_id": 5, "pr_comment": "Test Comment" }, { "pr_comment_id": 6, "pr_comment": "Test Comment" } ]
}*

Beautify json


Tags: httpstestcomapiidjsonresponseservice
1条回答
网友
1楼 · 发布于 2024-04-28 00:16:40

当您的个人响应完成时,您可以使用extend(vsappend)创建一个值列表。然后创建最终的词典

下面是一个实现方法的模型—收集所有响应,然后迭代列表。否则,您可以在每个响应进入时解析它们

response1 = { "@odata.context": "https://example.com/services/api/x/odata/api/views/$metadata#vw_rpt_review_response_comment", "value": [ { "pr_comment_id": 1, "pr_comment": "Test Comment" }, { "pr_comment_id": 2, "pr_comment": "Test Comment" }, { "pr_comment_id": 3, "pr_comment": "Test Comment" } ],
"@odata.nextLink": "https://example.com/services/api/x/odata/api/views/$metadata#vw_rpt_review_response_comment?$skip=1000"
} 

response2 = { "@odata.context": "https://example.com/services/api/x/odata/api/views/$metadata#vw_rpt_review_response_comment", "value": [ { "pr_comment_id": 4, "pr_comment": "Test Comment" }, { "pr_comment_id": 5, "pr_comment": "Test Comment" }, { "pr_comment_id": 6, "pr_comment": "Test Comment" } ],
"@odata.nextLink": "https://example.com/services/api/x/odata/api/views/$metadata#vw_rpt_review_response_comment?$skip=2000"
}

value_list = []
for resp in [response1, response2]:
    # print(resp['value'])
    value_list.extend(resp['value'])

my_dict = {'value': value_list}
my_dict

输出

{'value': [{'pr_comment_id': 1, 'pr_comment': 'Test Comment'},
  {'pr_comment_id': 2, 'pr_comment': 'Test Comment'},
  {'pr_comment_id': 3, 'pr_comment': 'Test Comment'},
  {'pr_comment_id': 4, 'pr_comment': 'Test Comment'},
  {'pr_comment_id': 5, 'pr_comment': 'Test Comment'},
  {'pr_comment_id': 6, 'pr_comment': 'Test Comment'}]}

相关问题 更多 >