web-dev-qa-db-fra.com

Comment JSON.stringifier un tableau d'objets

J'essaie de JSON.stringify() la paire clé/valeur suivante, où la valeur est un tableau d'objets.

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

Ceci est incorrect et donne l'erreur suivante:

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

                ^

TypeError: Conversion d'une structure circulaire en JSON

Voici la méthode:

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

Ajout de la structure de données users:

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

Fonction ajoutée pour ajouter un utilisateur au tableau des utilisateurs.

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

Capture d'écran ajoutée d'un tableau JavaScript contenant un objet ainsi que des paires clé/valeur à l'intérieur d'un objet.

enter image description here

Capture d'écran ajoutée du tableau des clients contenant des objets WebSocket. enter image description here

Comment puis-je correctement "stringifier" {key: arrayOfObjects[{key:value,key:{}},{},{}]}?

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

var string = JSON.stringify(data);

Est-ce que cela fonctionnerait pour vous?

modifier

Je viens de remarquer que votre erreur est de type circulaire, votre objet utilisateur ou pièce crée probablement une référence circulaire.

Utilisateur> Chambre> Utilisateur> Chambre etc ...

3
Shaun Sharples