如何JSON.stringify一个对象数组

crm*_*ham 8 javascript arrays json object stringify

我正在尝试JSON.stringify()以下键/值对,其中值是一个对象数组.

var string = JSON.stringify({onlineUsers : getUsersInRoom(users, room)});
Run Code Online (Sandbox Code Playgroud)

这是不正确的,并给出以下错误:

var string = JSON.stringify({onlineUsers:getUsersInRoom(users,room)});

                ^
Run Code Online (Sandbox Code Playgroud)

TypeError:将循环结构转换为JSON

这是方法:

function getUsersInRoom(users, room) {
    var json = [];
    for (var i = 0; i < users.length; i++) {
        if (users[i].room === room) {

            json.push(users[i]);
        }
    }
    return json;
}
Run Code Online (Sandbox Code Playgroud)

添加users数据结构:

[
 {
     id:1,
     username:"",
     room:"room 1",
     client: {
         sessionId:1,
         key:value
     }
 },
 {
     // etc
 }
]
Run Code Online (Sandbox Code Playgroud)

添加了将用户添加到用户阵列的功能.

function addUser(client) {
    clients.push(client);
    var i = clients.indexOf(client);
    if (i > -1) {
        users.push({
            id : i,
            username : "",
            room : "",
            client : clients[i]
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

添加了包含对象的JavaScript数组的屏幕截图以及对象内的键/值对.

在此输入图像描述

添加了包含WebSocket对象的clients数组的屏幕截图. 在此输入图像描述

我如何正确"字符串化" {key: arrayOfObjects[{key:value,key:{}},{},{}]}

小智 5

var data = { };
data.onlineUsers = getUsersInRoom();

var string = JSON.stringify(data);
Run Code Online (Sandbox Code Playgroud)

这对你有用吗?

编辑

我刚刚注意到您的错误是循环类型,您的用户或房间对象可能正在创建循环引用。

用户 > 房间 > 用户 > 房间等...