JSON.stringify忽略一些对象成员

时间:2011-09-15 21:34:48

标签: javascript jquery 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 个答案:

答案 0 :(得分:25)

最简单的答案是指定要进行字符串化的属性

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

答案 1 :(得分:17)

如果您只支持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"}]

答案 2 :(得分:3)

我会创建一个新数组:

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

答案 3 :(得分:-1)

see this post指定您要包含的字段。 JSON.stringify(person,[" name"," Address"," Line1"," City"]) 它比上面建议的更好!