2016-01-29 3 views
4

Я пытаюсь использовать JSON.stringify() следующую пару ключ/значение, где это значение является массивом объектов.Как 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; 
} 

Добавлена ​​структура 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:{}},{},{}]}?

+0

Можете также добавить структуру данных о клиенте. В вашем массиве должно быть что-то, что содержит круговую ссылку. –

ответ

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

var string = JSON.stringify(data); 

Будет ли это работать на вас?

редактировать

Я просто заметил, ваша ошибка круговой тип, ваш пользователь или объект номер, вероятно, создает циклическую ссылку.

User > Room > User > Room etc...