2013-10-07 13 views
24

我做了「手動」通過我的JavaScript類的屬性,以形成JSON運行,如下圖所示。它感覺笨拙,我會學習如何自動執行此操作,因此,例如,如果我添加或刪除任何屬性,我就不必亂用'toJson'函數。如何JSONify一個JavaScript對象的屬性

一個有用的心靈可以點我就如何適應實現這一目的,下面的「的toJSON」功能,使正確的方向?

非常感謝提前。

/* Using Simple JavaScript Inheritance 
* By John Resig http://ejohn.org/ 
* MIT Licensed.*/ 
var LogEntry = Class.extend({ 
    init: function (_conferenceId, _tokenId, _logType, _logValue) { 
     this.dato = new Date(); 
     this.logValue = _logValue; 
     this.logType = _logType; 
     this.conferenceId = _conferenceId; 
     this.tokenId = _tokenId; 
    }, 
    toJson: function() { 
     // ? 
     var jsonStringBuilder = '{ '; 
     jsonStringBuilder += '"dato": ' + this.dato.toString() + ','; 
     jsonStringBuilder += '"conferenceId": ' + this.conferenceId + ','; 
     if (this.tokenId== null) { 
      jsonStringBuilder += '"tokenId":null,'; 
     } 
     else { 
      jsonStringBuilder += '"tokenId": ' + _tokenId + ','; 
     } 
     jsonStringBuilder += '"logValue": ' + this.logValue + ','; 
     jsonStringBuilder += '"logType": ' + this.logType; 
     jsonStringBuilder += '}'; 

     return jsonStringBuilder; 
     } 
}); 

回答

46

JSON.stringify是您正在尋找的功能。

某些very old browsers本身並不提供JSON對象,但可以使用a shim library作爲這些瀏覽器。

+0

我確實嘗試,但 的toJSON:函數(){ 回報JSON.stringify(本); } 返回null。 –

+0

你誤解了'JSON'。如果存在,'JSON.stringify' *調用對象的'toJSON'方法,然後序列化*函數返回的對象*。如果'toJSON'不存在,'stringify'只是序列化對象。 – josh3736

+3

我請你原諒。 'toJson'是我自己選擇的函數名稱。我推測它是個糟糕的選擇... –

7

我認爲你正在尋找JSON.stringify()

+1

我確實嘗試,但 的toJSON:函數(){ 回報JSON.stringify(本); } 返回null。 –

2

,如果你願意,可以使用字符串化。 Javascript也真的很酷,並且允許你傳遞上下文摘要,所以你實際上不需要像現在這樣定義類成員。我不知道你的最終目標是,但檢查:

function foo(context) { 
    dosomething(context.bar); 
} 

您可以動態地添加簡單的聲明成員的任意數量,使上下文JSON對象本身是這樣的:

context.bar = "hello world"; 

通過這種方式,當你將「上下文」傳遞給服務器時,並不需要「串化」它(假設你的後端框架有某種類型的JSON解析)。

編輯:我有一個小題外話,我只是不願意看到的則params的長串的JS

相關問題