JSON.stringify игнорировать некоторые члены объекта
Вот простой пример.
function Person() {
this.name = "Ted";
this.age = 5;
}
persons[0] = new Person();
persons[1] = new Person();
JSON.stringify(persons);
Если у меня есть массив объектов Person, и я хочу их упорядочить. Как я могу вернуть JSON только с именем переменной.
Причина в том, что у меня есть большие объекты с рекурсивными ссылками, которые вызывают проблемы. И я хочу удалить рекурсивные переменные и другие из процесса stringify.
Спасибо за любую помощь!
4 ответа
Я хотел бы создать новый массив:
var personNames = $.map(persons,function(person){
return person.name;
});
var jsonStr = JSON.stringify(personNames);
Самый простой ответ - указать свойства для строкового
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
Если вы поддерживаете только 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"}]
Посмотрите этот пост, укажите поле, которое вы хотите включить. JSON.stringify(person,["name","Address", "Line1", "City"]) это лучше, чем предложенное выше!