web-dev-qa-db-ja.com

オブジェクトの配列をJSON.stringifyする方法

次のキーと値のペアをJSON.stringify()しようとしています。値はオブジェクトの配列です。

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

これは正しくなく、次のエラーが発生します。

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

                ^

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;
}

usersデータ構造を追加:

[
 {
     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配列のスクリーンキャプチャを追加しました。

enter image description here

WebSocketオブジェクトを含むクライアント配列の画面キャプチャを追加しました。 enter image description here

正しく「文字列化」するにはどうすればよいですか{key: arrayOfObjects[{key:value,key:{}},{},{}]}

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

var string = JSON.stringify(data);

これでうまくいきますか?

編集

エラーが循環型であることに気づきました。ユーザーまたはルームオブジェクトが循環参照を作成している可能性があります。

ユーザー>ルーム>ユーザー>ルームなど...

3
Shaun Sharples