【问题标题】:How to fix invalid source argument when using JSON from API从 API 使用 JSON 时如何修复无效的源参数
【发布时间】:2019-10-26 07:50:47
【问题描述】:

我正在尝试从 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 调用行作为数据参数,但收效甚微

【问题讨论】:

  • 它告诉你期望None或a string或an object ...,所以你从r.text得到的(最好使用r.content.decode())是一个字符串,所以不需要使用json.loads,尝试拨打:table1 = etl.fromjson(r.content.decode(), ...)

标签: python json petl


【解决方案1】:

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 中提取。

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2020-02-03
    • 2023-01-28
    • 2019-11-17
    相关资源
    最近更新 更多