socket.io为什么不能发送JSON

命令行运行node server.js,打开127.0.0.1:3000,出现Maximum call stack size exceeded报错。
服务端关键代码如下:

var userList = {};
...
io.sockets.on('connection', function (socket) {
    var session = socket.id;
    userList[session] = socket;
    socket.emit('rs',userList);
})

客户端关键代码如下:

socket.on('rs',function(userList){
    console.log(userList);
}

我试过传字符串没有问题,但是传这个JSON就不行了,为什么呢?是因为userList太大了吗?

补充:
刚刚按照下面的回答,试着把JSON转成字符串,结果发现还是报错TypeError: Converting circular structure to JSON
报错代码如下:

C:\PHPnow-1.5.6\htdocs\three.js\server.js:19
        var demo = JSON.stringify(userList);
                        ^

TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)
    at Namespace.<anonymous> (C:\PHPnow-1.5.6\htdocs\three.js\server.js:19:18)
    at emitOne (events.js:115:13)
    at Namespace.emit (events.js:210:7)
    at Namespace.emit (C:\PHPnow-1.5.6\htdocs\three.js\node_modules\_socket.io@2.0.3@socket.io\lib\namespace.js:212:10)
    at C:\PHPnow-1.5.6\htdocs\three.js\node_modules\_socket.io@2.0.3@socket.io\lib\namespace.js:180:14
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
阅读 6.2k
4 个回答

既然字符串可以,那你把JSON序列化成字符串不就可以了。

检查代码有造成循环结构的操作吗,比如这样:
var selfish = {};
selfish.friend = selfish;
JSON.stringify(selfish);

把JSON.stringify一下。 前端再解释回来。

发送的时候需要JSON.stringify(userList),接收的时候在JSON.parse()

提示的很清楚呀:循环依赖

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题