How to JSON.stringify an array of objects

crmepham picture crmepham · Jan 29, 2016 · Viewed 29.8k times · Source

I am attempting to JSON.stringify() the following key/value pair, where the value is an array of objects.

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

This is incorrect and gives the following error:

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

                ^

TypeError: Converting circular structure to JSON

This is the method:

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

Added users data structure:

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

Added function to add user to users array.

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

Added screen capture of JavaScript array containing an object as well as key/value pairs inside an object.

enter image description here

Added screen capture of the clients array containing WebSocket objects. enter image description here

How do I correctly "stringify" {key: arrayOfObjects[{key:value,key:{}},{},{}]}?

Answer

Shaun Sharples picture Shaun Sharples · Jan 29, 2016
var data = { };
data.onlineUsers = getUsersInRoom();

var string = JSON.stringify(data);

Would this work for you?

edit

I just noticed your error is circular type, your user or room object is probably creating a circular reference.

User > Room > User > Room etc...