2013-10-07 37 views
24

Ich mache ein "Handbuch" durch meine JavaScript-Klasse Eigenschaften durchlaufen, um JSON zu bilden, wie unten zu sehen. Es fühlt sich ungeschickt an und ich würde lernen, das automatisch zu tun, also würde ich mich nicht mit der "toJson" -Funktion herumärgern müssen, wenn ich zum Beispiel irgendwelche Eigenschaften hinzufüge oder entferne.Wie JSonify die Eigenschaften eines Javascript-Objekts

Kann mir ein hilfreicher Kopf in die richtige Richtung zeigen, wie man die untere "toJson" -Funktion für diesen Zweck anpasst?

Vielen Dank im Voraus.

/* 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; 
     } 
}); 

Antwort

46

JSON.stringify ist die Funktion, die Sie suchen.

Einige very old browsers liefern nicht nativ das JSON Objekt, aber Sie können a shim library für diese Browser verwenden.

+0

ich in der Tat, dass versucht haben, aber toJson: function() { return JSON.stringify (this); } gibt null zurück. –

+0

Sie missverstehen 'TOJSON'. Wenn es existiert, ruft 'JSON.stringify' * * die' toJSON'-Methode des Objekts auf und serialisiert dann das Objekt, das die Funktion * zurückgibt. Wenn 'toJSON' nicht existiert,' stringify' einfach serialisiert das Objekt. – josh3736

+3

Ich bitte um Verzeihung. 'toJson' war meine eigene Wahl des Namens für die Funktion. Ich nehme 'twas eine schlechte Wahl ... –

7

Ich denke, Sie suchen nach JSON.stringify().

+1

Ich habe das tatsächlich versucht, aber toJson: function() { zurückgeben JSON.stringify (this); } gibt null zurück. –

2

Sie können stringify verwenden, wenn Sie möchten. Javascript ist auch wirklich verdammt cool und erlaubt es Ihnen, Kontext-Abstracts zu übergeben, so dass Sie Klassenmitglieder wirklich nicht so definieren müssen, wie Sie sind. Ich weiß nicht, was Ihr Endziel aber dies wird überprüfen:

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

Sie können dynamisch eine beliebige Anzahl von Mitgliedern mit einfachen Erklärungen hinzufügen, Kontext von Natur aus ein JSON-Objekt machen wie folgt aus:

context.bar = "hello world"; 

Auf diese Weise müssen Sie, wenn Sie den "Kontext" an den Server übergeben, keine Notwendigkeit haben, sie "zu stringifizieren" (vorausgesetzt, Ihr Backend-Framework hat eine Art von JSON-Parsing).

Edit: Ich habe ein wenig off topic, ich hasse nur lange Zeichenketten von params in JS sehen

Verwandte Themen