如何将对象数组转换为JSON字符串

11

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

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

这是不正确的代码,会导致以下错误:

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

                ^

这是方法:

TypeError: Converting circular structure to 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;
}

新增了用户数据结构:

[
 {
     id:1,
     username:"",
     room:"room 1",
     client: {
         sessionId:1,
         key:value
     }
 },
 {
     // etc
 }
]

添加了将用户添加到用户数组的功能。

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

添加了JavaScript数组的屏幕截图,其中包含一个对象以及对象内的键/值对。

输入图像描述

添加了客户端数组的屏幕截图,该数组包含WebSocket对象。 输入图像描述

如何正确地“stringify”{key: arrayOfObjects[{key:value,key:{}},{},{}]}


你能否请添加你的客户端数据结构。你的数组中肯定包含了一个循环引用。 - Shaun Sharples
1个回答

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

var string = JSON.stringify(data);

这对您有用吗?

编辑

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接