You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:14:01