【发布时间】:2019-03-07 17:51:35
【问题描述】:
所以我从 API 中提取数据,并且只想从 JSON 响应中保存特定的字典和列表。问题是,当我在循环中转储数据时,它会在文件中创建看起来非常奇怪的数据,而这些数据实际上并不是 JSON。
r=requests.get(url,headers=header)
result=r.json()
with open ('myfile.json','a+') as file:
for log in result['logs']:
hello=json.dump(log['log']['driver']['username'], file)
hello=json.dump(log['log']['driver']['first_name'],file)
hello=json.dump(log['log']['driver']['last_name'],file)
for event in log['log']['events']:
hello=json.dump(event['event']['id'],file)
hello=json.dump(event['event']['start_time'],file)
hello=json.dump(event['event']['type'],file)
hello=json.dump(event['event']['location'],file)
这里的最终目标是将此数据转换为 CSV。我将它保存到 JSON 文件的唯一原因是我可以加载它并将其保存到 CSV 中。我的目标 API 端点是 Logs:
【问题讨论】:
-
在循环中,根据需要构建对象 (dict),然后在最后一次,将
json.dump()放入文件中。跨度> -
您希望 CSV 的每一行的 JSON 是什么样的?如果可能,请提供一个小样本。
-
或者,您可以添加对 CSV 文件的行中应该包含的内容的描述,因为如果这是您的,我认为进行此中间 JSON 到 JSON 转换步骤没有太大优势最终目标。
-
@martineau 这是我在终端上运行带有 print 的 python 脚本时得到的示例:驱动程序 ID:benpa 名:演示 姓:一个 ID:1234566 开始时间:2019 -03-07T00:00:00-05:00 类型:驾驶位置:田纳西州诺克斯维尔 ID:1234565 开始时间:2019-03-07T01:20:47-05:00 类型:on_duty 位置:克利夫兰东北 9.2 英里, TN 司机 ID:laet 名字:Demo 姓氏:两个 ID:1234567 开始时间:2019-03-07T00:00:00-05:00 类型:驾驶位置:田纳西州查塔努加
-
好的,我想我明白了。 CSV 文件的所有行通常都需要相同数量的字段,因此看起来驱动程序的名称必须在每个关联的事件行上重复。您可以通过将它们设置为空字符串来解决这个问题,除了同一驱动程序的一组它们的第一行之外。
标签: python json python-3.x api