如何修复从API使用JSON时的无效源参数

2024-06-01 02:13:20 发布

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

我试图从polygon.io API中提取财务数据来组织它,然后将其注入到Azure数据库中。为了实现这一点,我一直在使用“petl”python包,但是从一个示例表开始,我遇到了一些问题,因为一个无效的源参数,我认为这是由我如何检索和编写JSON结果引起的

import petl as etl
import websocket
import json
import requests

r =requests.get("https://api.polygon.io/v1/historic/forex/AUD/USD/2018-2-2?limit=1&apiKey=*********") 
#gets data includes plenty of responses that arnt text
data = json.loads(r.text)

table1 = etl.fromjson(data, header=['day','map','msLatency','pair','status','ticks','type'])
print(table1)

我希望一个表的列标题是列标题下面的值,但收到了以下错误消息:"AssertionError: invalid source argument, expected None or a string or an object implementing open()"

从API打印数据时,如下所示:

{'day': '2018-2-2', 'map': {'a': 'ask', 'b': 'bid', 't': 'timestamp'}, 'msLatency': 1, 'pair': 'AUD/USD', 'status': 'success', 'ticks': [{'b': 0.80392, 'a': 0.80392, 'x': 0, 't': 1517529600225}], 'type': 'forex'}

我曾尝试转换数据或使用api调用行作为数据参数,但收效甚微


Tags: 数据ioimportapijsondata参数etl
1条回答
网友
1楼 · 发布于 2024-06-01 02:13:20

petl.fromjson调用需要字符串(本地文件的路径)或无字符串(stdin)。您已经从URL中提取了JSON(文本),并将其转换为Python字典。所以你应该考虑字典,而不是源代码的JSON格式。我可以看到几种可能的解决方案:

  • 不要运行json.load,只需将响应写入临时文件,然后对该文件调用petl.fromjson
  • 不要使用petl.fromjson,因为您的数据不再是JSON,请使用petl.fromdicts,它可以从字典加载(实际上,在代码内部,petl.fromjson本质上调用json.load,然后调用petl.fromdicts
  • 如果您处理大量的数据,那么您可能希望将请求包装在一个io Helper中,以便它在读取和传递到进一步的PETL函数时从URL提取数据

相关问题 更多 >