2012-09-17 29 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