JSON.stringify игнорирует некоторые элементы объекта

Вот простой пример.

function Person() {
  this.name = "Ted";
  this.age = 5;
}

persons[0] = new Person();
persons[1] = new Person();
JSON.stringify(persons);

Если у меня есть объект массив объектов Person, и я хочу их укрепить. Как я могу вернуть JSON только с переменной имени.

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

Спасибо за любую помощь!

Ответ 1

Я бы создал новый массив:

var personNames = $.map(persons,function(person){
  return person.name;
});
var jsonStr = JSON.stringify(personNames);

Ответ 2

Самый простой ответ заключался бы в том, чтобы указать свойства для строкового

JSON.stringify( persons, ["name"] )

другой вариант заключается в добавлении метода toJSON к вашим объектам

function Person(){
  this.name = "Ted";
  this.age = 5;      
}
Person.prototype.toJSON = function(){ return this.name };

подробнее: http://www.json.org/js.html

Ответ 3

Если вы поддерживаете только совместимые среды, совместимые с ECMAScript 5, вы можете сделать свойства, которые следует исключить, неперечислимые, установив их с помощью Object.defineProperty() [ docs] или Object.defineProperties() [docs].

function Person() {
    this.name = "Ted";
    Object.defineProperty( this, 'age', {
        value:5,
        writable:true,
        configurable:true,
        enumerable:false // this is the default value, so it could be excluded
    });
}

var persons = [];

persons[0] = new Person();
persons[1] = new Person();

console.log(JSON.stringify(persons));  // [{"name":"Ted"},{"name":"Ted"}]

Ответ 4

см. это сообщение в соответствии с инструкцией и укажите поле, которое вы хотите включить. JSON.stringify(person, [ "name", "Address", "Line1", "City" ])

Ответ 5

см. этот пост укажите поле, которое вы хотите включить. JSON.stringify(person, [ "name", "Address", "Line1", "City" ]) это лучше, чем то, что было предложено выше!