Was ist JSON und warum sollte ich es verwenden?

I've sah auf Wikipedia und gegoogelt es und lesen Sie die offizielle Dokumentation, aber ich habe immer noch't bekam zu dem Punkt, wo ich wirklich verstehen, was JSON ist, und warum I'd es verwenden.

Ich entwickle seit einiger Zeit Anwendungen mit PHP, MySQL und Javascript/HTML, und wenn JSON mir das Leben leichter machen kann oder meinen Code oder meine Benutzeroberfläche verbessern kann, dann würde ich das gerne wissen. Kann mir jemand eine knappe Erklärung geben?

Lösung

JSON (JavaScript Object Notation) ist ein leichtgewichtiges Format, das für den Datenaustausch verwendet wird. Es basiert auf einer Teilmenge der JavaScript-Sprache (die Art und Weise, wie Objekte in JavaScript aufgebaut sind). Wie im MDN angegeben, ist ein Teil von JavaScript nicht JSON, und ein Teil von JSON ist nicht JavaScript. Ein Beispiel dafür sind die Antworten von Webdiensten. Früher verwendeten Webservices XML als primäres Datenformat für die Übermittlung von Daten, aber seit JSON aufgetaucht ist (Das JSON-Format ist in RFC 4627 von Douglas Crockford spezifiziert), ist es das bevorzugte Format, weil es viel leichter ist. Viele weitere Informationen finden Sie auf der offiziellen JSON-Website. JSON ist auf zwei Strukturen aufgebaut:

  • Eine Sammlung von Name/Wert-Paaren. In verschiedenen Sprachen wird dies als Objekt, Datensatz, Struktur, Wörterbuch, Hashtabelle, verschlüsselte Liste oder assoziatives Array realisiert.
  • Eine geordnete Liste von Werten. In den meisten Sprachen wird dies als Array, Vektor, Liste oder Sequenz realisiert.

    JSON-Struktur













    Hier ist ein Beispiel für JSON-Daten:

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

JSON in JavaScript

JSON (in Javascript) ist ein String! Oft wird angenommen, dass alle Javascript-Objekte JSON sind und dass JSON ein Javascript-Objekt ist. Dies ist falsch. In Javascript ist var x = {x:y} nicht JSON, dies ist ein Javascript-Objekt. Die beiden sind nicht dasselbe. Das JSON-Äquivalent (dargestellt in der Javascript-Sprache) wäre var x = '{"x":"y"}'. x" ist ein Objekt des Typs string und kein eigenständiges Objekt. Um dies in ein vollwertiges Javascript-Objekt zu verwandeln, müssen Sie es zuerst parsen, var x = JSON.parse('{"x":"y"}');, x ist jetzt ein Objekt, aber es ist nicht mehr JSON. Siehe Javascript object Vs JSON

Bei der Arbeit mit JSON und JavaScript könnte man versucht sein, die Funktion eval zu verwenden, um das im Callback zurückgegebene Ergebnis auszuwerten, aber das wird nicht empfohlen, da es zwei Zeichen (U+2028 & U+2029) gibt, die in JSON, aber nicht in JavaScript gültig sind (lesen Sie mehr dazu hier). Daher muss man immer versuchen, Crockford's Skript zu verwenden, das vor der Auswertung auf ein gültiges JSON prüft. Den Link zur Erklärung des Skripts finden Sie hier und hier ist ein direkter Link zur js-Datei. Jeder gängige Browser hat heutzutage seine eigene Implementierung für diese Funktion. Beispiel für die Verwendung des JSON-Parsers (mit dem json aus dem obigen Codeschnipsel):

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

Der JSON-Parser bietet auch eine weitere sehr nützliche Methode, stringify. Diese Methode akzeptiert ein JavaScript-Objekt als Parameter und gibt einen String im JSON-Format zurück. Dies ist nützlich, wenn Sie Daten an den Server zurücksenden wollen.

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

Die beiden oben genannten Methoden (parse und stringify) nehmen auch einen zweiten Parameter entgegen, der eine Funktion ist, die für jeden Schlüssel und Wert auf jeder Ebene des Endergebnisses aufgerufen wird, und jeder Wert wird durch das Ergebnis der von Ihnen eingegebenen Funktion ersetzt. (Mehr dazu hier) Übrigens, für alle, die glauben, JSON sei nur etwas für JavaScript, lesen Sie diesen Beitrag, der das Gegenteil erklärt und bestätigt.

Referenzen

Kommentare (9)

JSON steht für JavaScript Object Notation. Es ist eine viel kompaktere Art der Übertragung von Datensätzen über Netzwerkverbindungen im Vergleich zu XML. Ich schlage vor, JSON in allen AJAX-ähnlichen Anwendungen zu verwenden, in denen XML ansonsten die empfohlene Option wäre. Die Ausführlichkeit von XML verlängert die Downloadzeit und erhöht den Bandbreitenverbrauch ($$$). Mit JSON lässt sich derselbe Effekt erzielen, und das Markup bezieht sich fast ausschließlich auf die Daten selbst und nicht auf die zugrunde liegende Struktur.

Kommentare (0)

Die allgemeine kurze Antwort lautet: Wenn Sie AJAX verwenden, um Datenanforderungen zu stellen, können Sie problemlos Objekte als JSON-Strings senden und zurückgeben. Verfügbare Erweiterungen für Javascript unterstützen toJSON()-Aufrufe für alle Javascript-Typen zum Senden von Daten an den Server in einer AJAX-Anfrage. AJAX-Antworten können Objekte als JSON-Strings zurückgeben, die durch einen einfachen eval-Aufruf in Javascript-Objekte umgewandelt werden können, z.B. wenn die AJAX-Funktion someAjaxFunctionCallReturningJson zurückgibt

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

könnte man in Javascript schreiben

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON kann auch für Webdienst-Payloads u.a. verwendet werden, ist aber besonders praktisch für AJAX-Ergebnisse.

  • Update (zehn Jahre später): Don't do this, use JSON.parse
Kommentare (2)