如何让WebSocket返回JSON消息而非<function on_message...>函数对象?
解决WebSocket返回函数对象而非JSON消息的问题
兄弟,你这情况我太熟了——你看到的<function on_message at 0x...>是因为你直接引用了函数本身,而不是让它执行后返回解析好的JSON数据。咱们来调整代码,让你能拿到想要的JSON消息:
问题根源
你的on_message函数目前只是打印了解析后的JSON,但没有返回值,而且如果不小心直接打印on_message这个函数对象,就会出现你看到的那个输出。另外WebSocket的on_message是回调函数,它会在有消息推送时自动触发,不是靠你手动调用拿返回值的,所以咱们得换个思路存数据。
调整后的完整代码
from websocket import WebSocketApp from json import dumps, loads from pprint import pprint URL = "wss://ws-feed.gdax.com" # 用一个全局列表来存储收到的所有JSON消息,方便后续取用 received_json_messages = [] def on_message(_, message): # 把收到的字符串消息解析成JSON对象 parsed_json = loads(message) # 打印看效果(可选) pprint(parsed_json) # 把解析后的JSON存到列表里 received_json_messages.append(parsed_json) # 如果需要手动调用时能拿到返回值,就加上这行 return parsed_json def on_open(socket): # 补全订阅参数,这里用BTC-USD做示例 subscribe_params = { "type": "subscribe", "channels": [{"name": "ticker", "product_ids": ["BTC-USD"]}] } # 发送订阅请求 socket.send(dumps(subscribe_params)) # 初始化WebSocket应用并启动 ws_app = WebSocketApp( URL, on_message=on_message, on_open=on_open ) ws_app.run_forever()
关键调整点
- 新增了
received_json_messages列表:用来持久化存储所有收到的JSON消息,你在需要的时候直接访问这个列表就能拿到所有推送的JSON数据了 - 给
on_message加上了返回值:虽然WebSocket会自动回调这个函数,但如果后续有手动调用的场景,也能拿到解析后的JSON - 补全了
product_ids的示例值:避免语法错误,你可以换成自己需要的交易对
注意事项
别再直接打印on_message函数本身啦!这个函数是WebSocket框架自动调用的,当有消息过来时,它会自动执行并处理消息,你只需要通过received_json_messages列表去获取存储好的JSON数据就行。
内容的提问来源于stack exchange,提问作者Muema
相关产品推荐
相关产品推荐

