2012-09-17 27 views
2

嘿,我有一个数组对象是这样的排除对象的属性,而JSON-字符串化数组对象

[{ 
    public: "public", 
    private: "private", 
    [{ 
     properties: {... 
     }, 
     instance: {..... 
     } 
    }, {... 
    }, {... 
    }] 
}, {... 
}, {.... 
}] 

这里最外层的数组包含A类的对象,它具有一些公共的道具,一些私人porps和它还包含一个包含B类对象的数组,其中也包含一些公共和专用字段。

所以基本上这是我的层次

array = [A1,A2,A3,A4,....]//object of A 

var A = function(){ 
    var Const = function(){ 
    this.public_prop; 
    this.private_prop; 
    this.list = [B1,B2,B3,B4]// objects of B 
    } 
//......... 
return Const; 
}(); 

var B = function(){ 

    var Const = function(){ 
    this.public_prop; 
    this.private_prop; 
    } 
//......... 
return Const; 
}(); 

现在虽然字符串化(serialzing)它,我只想包括公共道具和序列化的字符串数组。

例如用于上述JSON表示我想是这样的

[{ 
     public: "public", 
     [{ 
      properties: {... 
      } 
     }, {... 
     }, {... 
     }] 
    }, {... 
    }, {.... 
    }] 

现在我可以创建每个类功能的getState(),这将只返回需要被字符串化的领域,但我似乎无法找到一种方法使JSON.stringify的本机实现在序列化之前调用该方法。有没有办法完成这个?

我指的是Hide certain values in output from JSON.stringify(),但它只解释了如何排除单个层次结构中的简单数字或字符串prop,但是如何排除多个层次中的道具?

注:我所有的类都遵循模块的模式在顶部

回答

1

假设你正在编写JavaScript作为你的问题标签提示(尽管你的示例代码看起来像是近乎c#!):你需要重写你正在序列化的对象的“toJSON”方法,而不是“stringify”也不是“getState”。

因此,如果你有一个对象“消息”有公立和“私人”性质,你需要定义一个“的toJSON”方法仅返回公共财产,如下图所示:

var Message = function() { 
    this.myPrivateProperty = "Secret message"; 
    this.myPublicProperty = "Message for the public"; 

    this.toJSON = function() { 
     return { 
      "public": this.myPublicProperty 
     }; 
    }; 
} 


alert(JSON.stringify(new Message())); // {"public":"Message for the public"} 
+1

这是我的错误,更正了语法,将尝试你的方法并回来:) – Ankur

3
var result = JSON.stringify(myjson, function(key, val) { 
    if (key !== "private") 
     return val; 
}); 

你的对象实例是无效的语法,但要排除名为"private"性能,这应该工作。

+1

但关键并不总是“私人”,这只是一个例子,就像例如'A类'有json对象“属性”,B类也包含相同的名为json对象,现在我想包括B类的属性,但不包括A的,如何做到这一点? – Ankur