【问题标题】:Python parsing string,listsPython解析字符串,列表
【发布时间】:2018-11-01 16:46:18
【问题描述】:

我目前正在努力解析以下字符串 - API 请求的响应 - https://api.iextrading.com/1.0/deep/book?symbols=goog

这个 API 的输出是

{"GOOG":{"bids":[{"price":1030.79,"size":100,"timestamp":1541428203560},{"price":1003.79,"size":200,"timestamp" :1541429104723}],"asks":[{"price":1040.62,"size":100,"timestamp":1541429609821},{"price":1084.79,"size":100,"timestamp":1541428203541}, {"price":1111.79,"size":200,"timestamp":1541428981007}]}}

希望从出价和要价的输出中获取 price 值和 size 值。将其保存为数据框或其他可行的格式。

感谢您的帮助!


我能够通过将其格式化为 fdataframe 和索引来获取每个行的第一行,例如

a = pd.read_json(url).dropna()
r = pd.DataFrame(a)
print(r.iloc[0][0][0])

回应

{'timestamp': 1541428203541, 'price': 1084.79, 'size': 100}

但我仍然需要以某种方式解析它以获取 pricesize 值...

【问题讨论】:

  • 能否提供一些关于您目前尝试过的内容或您想使用的语言的背景信息?

标签: json python-3.x list parsing tuples


【解决方案1】:

假设这是 JSON;使用json.loads 将其转换为嵌套字典。

>>> line = '{"GOOG":{"bids":[{"price":1070.92,"size":100,"timestamp":1541089522066}],"asks":[]}}'
>>> d = json.loads(line)
>>> d["GOOG"]["bids"][0]["price"]
1070.92
>>> d["GOOG"]["bids"][0]["size"]
100

来自 cmets:

url = "api.iextrading.com/1.0/deep/book?symbols=goog"
d = json.loads(url)`

嗯,问题在于您试图将 URL 本身 解析为 JSON 字符串。这不是json.loads 所做的。相反,您必须先从该 URL 读取内容,例如使用urllib,或者只使用pandas.read_json,就像您在问题的其他代码中所做的那样:

>>> d = pd.read_json(url).to_dict()
>>> d["GOOG"]["bids"][0]["price"]
1037.23

【讨论】:

  • 一旦我尝试这样做,它就会显示错误。文件“pandas_libs\hashtable_class_helper.pxi”,第 1500 行,在 pandas._libs.hashtable.PyObjectHashTable.get_item KeyError: 1
  • 不确定 keyerror 1 来自哪里,但知道我收到以下错误 - Traceback(最近一次调用最后一次):文件“C:\Users\Alexander\lib\json\decoder.py ",第 357 行,在 raw_decode 中引发 JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
  • 感谢您的帮助!你对问题的理解是正确的。我还编辑了这个问题,希望现在更好。一旦我尝试运行您的代码 - d = json.loads(line),我就会收到错误 - JSONDecodeError("Expecting value", s, err.value)
  • ` ->(a)' 只是推荐,我将其删除,因为它令人困惑。链接输出有时会有所不同,因为它是动态的。所以我发布了今天早上这个时候收到的回复,并没有什么不同。但是结构是相同的,我相信适当的代码应该可以正常工作,无论输出中的值有多少。
  • 我没有什么可隐藏的,代码都在这里,我正在运行以下命令-- import json url = "api.iextrading.com/1.0/deep/book?symbols=goog" d = json.loads(url) d["GOOG"] [“出价”][0][“价格”]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
相关资源
最近更新 更多