Python解析字符串,列表

时间:2018-11-01 16:46:18

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

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

此API的输出为

  

{“ GOOG”:{“出价”:[{“价格”:1030.79,“大小”:100,“时间戳”:1541428203560},{“价格”:1003.79,“大小”:200,“时间戳” :1541429104723}],“请求”:[{“价格”:1040.62,“大小”:100,“时间戳”:1541429609821},{“价格”:1084.79,“大小”:100,“时间戳”: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的值...

1 个答案:

答案 0 :(得分:2)

假设这是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

来自评论:

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