【问题标题】:Retrieving single json object from python requests results as list从 python 请求结果中检索单个 json 对象作为列表
【发布时间】:2020-04-21 01:05:35
【问题描述】:

在查询我的 API 后,我试图从 json 结果中仅检索 requestId 对象。

我的代码:

def findRequests(group, token, user):
    headers = { 'accept': 'application/json', 
        'Content-Type': 'application/json', 
        'token': token,
        'user': user}
    endpoint = 'requests/find'
    body = {'groupIDs': [group], "createdDate": {'operator': "BETWEEN", 'fromDate': "01-APR-2020 00:00:00", 'toDate': "21-APR-2020 00:00:00"}} 
    r = requests.post(url = host + endpoint, headers = headers, json=body, verify=False)
    data = json.loads(r.text)
    print (data[0]['requestId'])

json 数据:

[{'requestId': 2567887, 'requestName': 'Here is a sample name', 'requestSubject': 'sample subject', 'createdDate': '01-APR-2020 14:06:03'}, {'requestId': 7665432,...}] 

然后我想将结果中找到的 requestId 对象的所有值保存为列表:

 myRequestsList = print(findRequests(group, token, user))

然而,上面将只返回一个 requestId,而不是在 def findRequests(group, token, user) 中的 data 变量中返回的所有请求Id。我做错了什么?

输出:

2567887
None

期望的输出:

2567887,
7665432

有人可以帮我解决这个问题吗?提前致谢!

【问题讨论】:

  • 你的函数应该return而不是print
  • 刚刚更改为return (data[0]['requestId']),但之后尝试myList = print(findRequests(group, token, user)) 时,它仍然只返回一个ID,而不是json数据中的所有ID。还有什么我做错了吗?

标签: python json python-requests


【解决方案1】:

首先,你应该修改你的函数:

然后,将变量分配给函数,而不是打印:

myRequestsList = list(findRequests(group, token, user)))

(!) 但是,我假设组、令牌、用户被其他变量替换。

最后,得到输出:

for req in myRequestsList:
 print(req)

后期编辑:

def findRequests(group, token, user):
    headers = { 'accept': 'application/json', 
        'Content-Type': 'application/json', 
        'token': token,
        'user': user}
    endpoint = 'requests/find'
    body = {'groupIDs': [group], "createdDate": {'operator': "BETWEEN", 'fromDate': "01-APR-2020 00:00:00", 'toDate': "21-APR-2020 00:00:00"}} 
    r = requests.post(url = host + endpoint, headers = headers, json=body, verify=False)
    data = json.loads(r.text)
    final_list = []
    for each_req in data:
      final_list.append(each_req['requestId'])
    return final_list

myRequestsList = findRequests(group, token, user)

for each in myRequestsList:
 print(each)

【讨论】:

  • 我已经尝试了上述方法,当运行此位 myRequestsList = list(findRequests(group, token, user)) 时,它会显示 TypeError: 'int' object is not iterable。知道我在这里做错了什么吗?谢谢!
  • 这是因为findRequests(group, token, user))检索的是一个整数;你介意分享 json 还是只分享其中的一小部分(包含 a12bd-fr145-52dg、b67da-pl132-53dg、c78aa-de111-890)
  • 关于问题的 Np :) 我的错,用`而不是for。修改了函数。 for each_req in data: 而不是 with each_req in data。更新了答案。再次抱歉。
  • 它现在工作了!非常感谢您帮我解决这个问题!
  • 嗨@Baobab1988 在repl.it/repls/IdolizedEducatedDecompiler中包含了一些样本
猜你喜欢
  • 2018-01-09
  • 2020-02-11
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
相关资源
最近更新 更多