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

WebSocket聊天应用:服务器返回数据JSON解析报‘Unexpected token o’错

问题原因与解决方法

你遇到的Unexpected token o in JSON at position 1错误,核心原因是:服务器接收到的data已经是被自动解析后的JavaScript对象,而非原始JSON字符串。当你直接调用client.send(data)时,Node.js会将对象默认转为字符串"[object Object]",客户端用JSON.parse解析这个无效字符串就会触发错误。


解决方法

方法1:服务器端重新序列化对象

修改服务器代码,将解析后的对象重新转为JSON字符串再发送:

ws.on('message', function incoming(data) {
    // 将对象重新序列化为JSON字符串后转发
    client.send(JSON.stringify(data));
})

大多数WebSocket库(比如Node.js的ws模块)默认会自动解析JSON格式的消息为JS对象,所以需要手动转回去。

方法2:关闭服务器的自动解析功能

如果服务器不需要处理消息内容,只是做转发,可以初始化WebSocket服务器时关闭自动解析,直接接收原始字符串:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ 
    port: 8080,
    // 关闭自动解析,接收原始JSON字符串
    objectMode: false 
});

// 此时data是原始字符串,可直接转发
wss.on('connection', (ws) => {
    ws.on('message', (data) => {
        ws.send(data);
    });
});

你的客户端代码是正确的:发送时用JSON.stringify转成JSON字符串,接收时用JSON.parse解析,只要服务器返回的是标准JSON字符串就不会出错。

内容的提问来源于stack exchange,提问作者Ryan D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:18:20