【问题标题】:Multiple GET Requests, merge json response into one array or json object多个 GET 请求,将 json 响应合并到一个数组或 json 对象中
【发布时间】:2020-05-19 17:01:09
【问题描述】:

我正在运行一个 get 请求,它以 json 格式返回一些数据,同时还为我提供下一页数据的下一个 url。我运行了一个 while 循环来获取所有数据,但想将每个新页面数据附加到现有对象。最终,我想要一个大的 json 对象或数组。

到目前为止,这是我的代码,我不认为 append 是正确的做法,因为它在每个页面的数组中创建一个索引。相反,我想要一个索引或一个包含所有数据的 json 对象。

host = 'https://xxxxx.com/api/v1/users'

headers = {'Accept': 'application/json', 'Content-Type': 'application/json',
           'Authorization': 'xxxxx'}

response = requests.get('{}'.format(host), 
                            headers = headers)
alist = []
keep_running = True
while keep_running:

    json_response = response.json()
    alist.append(json_response)
    host = response.links['next']['url']
    response = requests.get('{}'.format(host), 
                        headers = headers)    
    keep_running = response.status_code == requests.codes.ok and 'next' in response.links.keys()

每页有 200 个对象,大约 18 页。我得到一个长度为 18 的数组,每个索引中有 200 个对象。理想情况下,我想要一个长度为 18*200 = 3,600 的数组。

我可以使用 pandas 创建数据框/表,但是,我也希望在原始 json 中使用它。任何想法或帮助表示赞赏。

【问题讨论】:

    标签: python json python-requests


    【解决方案1】:

    假设您的json_responselist,看起来list.extend() 就是您要查找的内容。所以不要使用alist.append(json_response),而是使用alist.extend(json_response)

    append - 在列表末尾添加一个项目。

    extend - 通过附加来自可迭代对象的所有项目来扩展列表。

    例子:

    x = [1, 2]
    
    x.append([3, 4]) # gives [1, 2, [3, 4]]
    
    x.extend([3, 4]) # gives [1, 2, 3, 4]
    

    【讨论】:

      【解决方案2】:

      我不确定您的数据实际上是什么样的。但是听起来你可以将 json-objects 作为 python-object 加载。附加所有数据,然后将其转换回 json 字符串。

      像这样:

      import json
      
      
      ...
      alist = []
      keep_running = True
      while keep_running:
      
          json_response = response.json()
          alist.append(json.loads(json_response))
          host = response.links['next']['url']
          response = requests.get('{}'.format(host), 
                              headers = headers)    
          keep_running = response.status_code == requests.codes.ok and 'next' in response.links.keys()
      
      
      json_string = json.dumps(alist)
      

      【讨论】:

        猜你喜欢
        • 2017-11-03
        • 1970-01-01
        • 2012-07-17
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        相关资源
        最近更新 更多