【问题标题】:concatenate several JSON responses连接多个 JSON 响应
【发布时间】:2023-03-09 14:20:02
【问题描述】:

我尝试连接来自 XHR 的多个 JSON 响应。

我有一个 XHR 列表,我想检查并将所有结果放在同一个 CSV 中。我知道我可能应该在循环之外写入 CSV,但最初我只是希望它能够工作。最后我做了两个cmets,这是我没有开始工作的部分。我还在最后添加了一个休息时间,这样您就不必经历所有事情。

import requests
import pandas as pd
from pandas.io.json import json_normalize
import csv
import json
    


h = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
     'X-Requested-With': 'XMLHttpRequest',
}

#VARIABLES
i=0

projects = "https://cdn-search-standard-prod.azureedge.net/api/v1/tags/all/2af3c43b-98aa-49d8-b4ff-da6d5a992751" 

y=requests.get(projects,headers=h).json()
df=pd.json_normalize(y)
df.to_csv(r'C:\Users\abc\Documents\Python Scripts\ListOfProjects_20200628.csv', index=False, sep=';',encoding='utf-8')

export=[]
i=29

for y in y:
    print(str(df.id[i]))
    u = "https://cdn-search-standard-prod.azureedge.net/api/v1/search/getstageobjects/"+str(df.id[i])
    i = i+1
    units = requests.get(u,headers=h).json()
    dp=pd.DataFrame(units)
    dp = pd.json_normalize(units)

    dp.to_csv(r'C:\Users\abc\Documents\Python Scripts\Units_20200628.csv', index=False, sep=';',encoding='utf-8')
    #export = pd.concat([export,dp], ignore_index=False, sort=False)
    #export.to_csv(r'C:\Users\abc\Documents\Python Scripts\Units_20200628.csv', index=False, sep=';',encoding='utf-8')
    break

【问题讨论】:

  • 代码的第一行看起来很有趣:“for y in y”。还有,h是什么?请包含重现您的问题/问题所需的所有代码。
  • 好的,会的。我只是想变得聪明并限制行数:-)
  • 那也不错。如果代码太多,请简化为更简单的代码。
  • Roy2012,我已经更新了

标签: python arrays json pandas concatenation


【解决方案1】:

这是一种方法。将所有“部分”数据框保存在一个列表中,然后使用pd.concat 创建一个大数据框。然后,您可以使用to_csv 保存这个大数据框。这是代码的相关部分:

df_list = []

for y in y[:10]: # for development purpose - iterate over 10 URLs only
    print(str(df.id[i]))
    u = "https://cdn-search-standard-prod.azureedge.net/api/v1/search/getstageobjects/"+str(df.id[i])
    i = i+1
    units = requests.get(u,headers=h).json()
    dp=pd.DataFrame(units)
    dp = pd.json_normalize(units)
    df_list.append(dp)

res = pd.concat(df_list)
res.to_csv("final_result.csv")

【讨论】:

  • 太棒了!正是我想要的答案!
  • 您能否尽快给我一个建议,告诉我如何在我的 csv(最左侧)中添加一列,我存储项目 ID(我正在迭代的那个),所以我可以过滤掉我正在创建的 CSV 中的不同项目?
  • 在将其附加到列表之前,执行 dp["project_id"] = 123。放置任何你想要的而不是 123。
  • 对于您正在下载的其中一个 URL,y["id"] 是 d933ae51-bc42-e611-8139-c4346bad5070。你能做什么 dp["proj_id] = y["id"]. 这个特定数据帧中的所有行都将这个值作为 proj_id
  • 我看到不同的 JSON 有不同的列。不要认为这是一个问题 - 但我会再次验证。 (已检查。根本不是问题)。
猜你喜欢
  • 2019-05-04
  • 1970-01-01
  • 2016-05-12
  • 2016-08-20
  • 1970-01-01
  • 2017-11-05
  • 2018-03-13
  • 1970-01-01
  • 2018-09-14
相关资源
最近更新 更多