JSON.stringify игнорировать некоторые члены объекта - PullRequest
11 голосов
/ 16 сентября 2011

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

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

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

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

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

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

Ответы [ 4 ]

25 голосов
/ 30 декабря 2012

самый простой ответ - указать свойства для строкового преобразования

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

другой вариант - добавить метод toJSON для ваших объектов

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

more: http://www.json.org/js.html

17 голосов
/ 16 сентября 2011

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

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"}]
3 голосов
/ 16 сентября 2011

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

var personNames = $.map(persons,function(person){
  return person.name;
});
var jsonStr = JSON.stringify(personNames);
0 голосов
/ 23 августа 2015

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

...