Samco API字典问题

2024-04-25 21:37:57 发布

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

我有以下字典:

msg = {"response":{"data":{"aPr":"143.90","aSz":"75","avgPr":"190.12","bPr":"143.70","bSz":"75","c":"398.40","ch":"-254.50","chPer":"-63.88","h":"277.60","l":"123.20","lTrdT":"14 May 2020, 03:21:21 PM","ltp":"143.90","ltq":"75","ltt":"14 May 2020, 03:21:21 PM","lttUTC":"14 May 2020, 09:51:21 AM","o":"245.95","oI":"58275","oIChg":"-50100.00","sym":"59605_NFO","tBQ":"347625","tSQ":"44925","ttv":"425688175.07","vol":"2239050","yH":"277.60","yL":"0.00"},"streaming_type":"quote"}}

我想从中提取关键值。我正在使用以下代码:

ltp = msg(["ltp"])

但它表明:

error :string indices must be integers"
import requests
import pdb
import json
import pprint
import websocket
from websocket import WebSocketApp
import xlwings as xw
import datetime


name = "Tickdata"

wb = xw.Book('watchlist.xlsx')
sht3 = wb.sheets['Tickdata']
row_no = 2



def on_message(ws, msg):
    global row_no
    pdb.set_trace()
    print (msg)
    ltp = msg(["ltp"])


    sht3.range('A' + str(row_no)).value = msg
    row_no = row_no + 1

def on_error(ws, error):
    print (error)

def on_close(ws):
    print ("Connection Closed")

def on_open(ws):
    print ("Sending json")
    data='{"request":{"streaming_type":"quote", "data":{"symbols":[{"symbol":"59605_NFO"}, {"symbol":"59606_NFO"}]}, "request_type":"subscribe", "response_format":"json"}}'
    ws.send(data)
    ws.send("\n")


headers = {'x-session-token': ''}

websocket.enableTrace(True)

ws = websocket.WebSocketApp("wss://stream.stocknote.com", on_open = on_open, on_message = on_message, on_error = on_error, on_close = on_close, header = headers)

ws.run_forever()

这是Samco的API“https://developers.stocknote.com/api/?python#search-equity-scrips


Tags: noimportdatawsondeftypemsg
3条回答

你不叫字典。正如注释中的user@fas所指出的,ltp不是直接在字典中,而是嵌套在数据字典中,数据字典嵌套在响应字典中。因此,您的代码将是:

ltp = msg["response"]["data"]["ltp"]

如果希望它是十进制的,请使用

ltp = float(msg["response"]["data"]["ltp"])

你必须逐级访问字典

具有:

{'response': {'data': {'ltp': '143.90'}}}

这样做有三个级别:

msg['response']['data']['ltp']

会给你价值。如果您只需要键值,可以使用keys(),如下所示:

msg['response']['data'].keys()

您可以尝试以下方法:

msg = {"response":{"data":{"aPr":"143.90","aSz":"75","avgPr":"190.12","bPr":"143.70","bSz":"75","c":"398.40","ch":"-254.50","chPer":"-63.88","h":"277.60","l":"123.20","lTrdT":"14 May 2020, 03:21:21 PM","ltp":"143.90","ltq":"75","ltt":"14 May 2020, 03:21:21 PM","lttUTC":"14 May 2020, 09:51:21 AM","o":"245.95","oI":"58275","oIChg":"-50100.00","sym":"59605_NFO","tBQ":"347625","tSQ":"44925","ttv":"425688175.07","vol":"2239050","yH":"277.60","yL":"0.00"},"streaming_type":"quote"}}

d = msg['response']['data']
for key, value in d.items():
 print(key)
 print(value)

或者直接获取键值:

value = msg['response']['data']['ltp']

相关问题 更多 >