Zum Inhalt springen
Der Guide für ein smartes Leben.
Schlanker Kern

JSON in ECMAScript 5

Autoren: Anna Kobylinska und Filipe Pereira Martins • 27.2.2011 • ca. 3:30 Min

Sollten zwei Objekte, a und b, über jeweils einen Setter namens i verfügen, entspricht der Wert von a[i] bei der Zuweisung:...

Sollten zwei Objekte, a und b, über jeweils einen Setter namens i verfügen, entspricht der Wert von a[i] bei der Zuweisung:

a[i] = b[i];

image.jpg
Die ECMAScript 5-Spezifikation gibt es als Download.
© Anna Kobylinska, Filipe Pereira Martins, Daniela Schrank

nicht dem Setter des Objektes b, sondern dem Resultat der Getter-Funktion von b. Mittels __lookupGetter__ und __lookup- Setter__ bekommen Sie die Möglichkeit, auf die ursprünglichen Funktionen der Methoden zuzugreifen.Sie dürfen bei einem Objekt nur genau einen Getter- und genau einen Setter-Operator pro Name nutzen (das heißt ein Getter und ein Setter pro Wert sind zulässig, aber zwei Getter oder zwei Setter pro Wert sind unzulässig). Doch richtig knifflig wird es beim Versuch, einen Getter oder Setter zu löschen. Korrekt erfolgt dies mittels:

delete object[name];

Dieser Befehl ist nämlich in der Lage, gewöhnliche Objekteigenschaften, den Getter und den Setter zu löschen.Und noch ein Hinweis: mittels __define- Getter__ oder __defineSetter__ werden kommentarlos zuvor existierende Getter und Setter und auch gleichnamige Objekteigenschaften einfach überschrieben. Bei 'delete object[name];' empfiehlt es sich jetzt daher, Vorsicht walten zu lassen, um nicht versehentlich über das Ziel hinauszuschießen.

JSON in ECMAScript 5

Da sich per AJAX sowohl reine Daten als auch ausführbare Skripte nachladen lassen, liegen potenzielle Gefahren auf der Hand. Um ECMAScript-Entwicklern eine effizientere Handhabung von Daten zu ermöglichen wurde JSON (JavaScript Object Notation) zum offiziellen Bestandteil des ECMAScript 5-Standards gekürt und wird nativ unterstützt.JSON ist ein Text-basiertes Datenaustauschformat, welches auf der Syntax von JavaScript aufsetzt und mit minimalem Aufwand verarbeitet werden kann.

Linktipps

Standard ECMA-262 der ECMAScript-Sprachspezifikation, 5. Ausgabe (Dezember 2009): www.ecma-international.org/publications/standards/Ecma-262.htm Douglas Crockford, Erfinder von JSON in JavaScript: www.json.org/js.html V8 ist Googles Open-Source-JavaScript-Engine: code.google.com/p/v8/ Nativer Einsatz von JSON für Mozilla-Produkte: developer.mozilla.org/En/Using_native_JSON JavaScript-(ECMAScript)-Konformitätstest, Version 2 von Google Labs: sputnik.googlelabs.com/run Der SunSpider-JavaScript-Benchmark testet unter anderem die JSON-Eingabe, 3D-Raytracing, Kryptographietests, Quelltextdecompression: www2.webkit.org/perf/sunspider-0.9/sunspider-driver.html

In JSON kommen zwei wesentliche Datenstrukturen vor: Arrays und Name/Wert- Paare. Den Name/Wert-Paaren in JSON entsprechen Objekte (zum Beispiel in C, C++ oder Objective-C), structs (in C#) oder Records (in Pascal). Arrays in JSON werden als kommatagetrennte geordnete Listen implementiert.Unter den in JSON zulässigen Datenstrukturen befinden sich zudem noch Zeichenketten, Zahlen, boolesche Werte (true und false) und Null. Standardmäßig wird als Zeichenkodierung UTF-8 verwendet, aber UTF-16- und UTF-32-Kodierungen sind ebenfalls zulässig.Alles in allem klassifizieren sich die Datenstrukturen in ECMAScript 5 zwar nicht als ein neuartiger Entwurf, aber darum ging es ja auch gar nicht. Es ging vielmehr darum, eine in der Praxis sinnvoll anwendbare Lösung für den Datenaustausch zu implementieren.JSON ist absichtlich - anders als beispielsweise der recht komplexe XML-Standard - ein Leichtgewicht unter den Datenaustauschformaten und spart damit wertvolle Performance. Es lässt sich leicht von Menschen lesen und verfassen und zudem auch effizient maschinell parsen und erzeugen. Außerdem sind die Sprachkonventionen gezielt so gewählt, dass sich nicht nur JavaScript-Entwickler sondern auch Programmierer von C/C++/ Objective C, C#, Java, Perl und Python schnell zurechtfinden.

JSON.parse() statt eval()

Die native Implementierung von JSON in ECMAScript 5 schließt nebenbei eine nicht zu unterschätzende Sicherheitslücke. Wurden bisher Objekte als Textketten angeliefert, so wurde zur Umwandlung meist eval() genutzt. Davon ist aus Sicherheitsgründen dringend abzuraten.Das Problem mit eval() besteht darin, dass sämtliche Eingabe, die als eine Textzeichenkette übergeben wird, von dieser Funktion ungeprüft übernommen wird. Bösartigem Code wird so ganz leicht Tür und Tor geöffnet. Workarounds existieren zwar, aber sie sind umständlich und rechenzeitlastig, sodass sie in der Praxis kaum jemand benutzt.In ECMAScript 5 können Sie statt des sicherheitskritischen eval() einfach JSON. parse() nutzen, zum Beispiel:

var meineZeitschrift = JSON.parse
(Zeitschriftenbeschreibung);

Es geht auch in die umgekehrte Richtung:

var Zeitschriftenbeschreibung = JSON.
stringify(meineZeitschrift);

Beim Einsatz von JSON.parse() werden so nur gültige JSON-Texte akzeptiert und Skripte grundsätzlich abgelehnt.Die JSON-Aufrufe JSON.parse() und JSON. stringify() sind seit ECMAScript 5 nun endlich Bestandteil des Standards.Solange ECMAScript 5 noch nicht Eingang in alle Webbrowser gefunden hat, kann man sich mit Douglas Crockford JSON-Bibliothek behelfen. Besonders praktisch an der Lösung ist die Tatsache, dass ein JSON-Objekt sinnvollerweise nur dann erzeugt wird, falls es nicht bereits existiert, konkret also:

if (!this.JSON)
{
this.JSON = {};
}

JSON wird durch Mozilla Firefox bereits seit der Version 3.5 und in Internet Explorer seit der Version 8 unterstützt.

Chancen und Tücken

Die vielen Neuerungen in ECMAScript 5 eröffnen interessante neue Möglichkeiten für eine neue Generation leistungsfähiger Web-Anwendungen.Der strict-Modus, object.seal und object. freeze zählen zu den leichter verständlichen neuen Features von ECMAScript 5, die die Sicherheit von Skripten verbessern. Getter und Setter hingegen sind genauso faszinierend und leistungsfähig wie sie tückisch sind.Potenzielle Stolperfallen gibt es hier wie den sprichwörtlichen Sand am Meer; die Vorteile sind jedoch unbestritten und das Urteil eindeutig: ECMAScript 5 repräsentiert einen wahren Quantensprung für die Web-Entwicklergemeinde.