Was ist JSON und warum sollte ich es verwenden?


542

Ich habe auf Wikipedia nachgesehen und es gegoogelt und die offizielle Dokumentation gelesen, aber ich bin immer noch nicht an dem Punkt angelangt, an dem ich wirklich verstehe, was JSON ist und warum ich es verwenden würde.

Ich habe eine Weile Anwendungen mit PHP, MySQL und Javascript / HTML erstellt, und wenn JSON etwas tun kann, um mein Leben oder meinen Code oder meine Benutzeroberfläche zu verbessern, würde ich gerne davon erfahren. Kann mir jemand eine kurze Erklärung geben?


2
JSON ist eine Teilmenge von YAML yaml.org
Brad Gilbert

15
copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it Dies ist ein schönes, einfaches Beispiel für die Verwendung
Tom


1
+ Brad Gilbert Nicht wirklich - es ist eine eigene Art, Daten auszudrücken, und ähnelt JSON, nur weil beide Objekte als Zeichenfolgen ausdrücken (ähnlich wie XML oder Plists oder viele andere), aber JSON ist besser für maschinelles Schreiben und YAML für menschliches Schreiben .
Ben Aubin

Antworten:


649

JSON (JavaScript Object Notation) ist ein leichtes Format, das für den Datenaustausch verwendet wird. Es basiert auf einer Teilmenge der JavaScript-Sprache (die Art und Weise, wie Objekte in JavaScript erstellt werden). Wie im MDN angegeben , ist ein Teil von JavaScript kein JSON und ein Teil von JSON kein JavaScript.

Ein Beispiel dafür, wo dies verwendet wird, sind Webdienstantworten. Früher verwendeten Webdienste XML als primäres Datenformat für die Rückübertragung von Daten. Seit dem Erscheinen von JSON ( das JSON-Format wird in RFC 4627 von Douglas Crockford angegeben ) war es das bevorzugte Format, da es viel mehr ist Leicht

Weitere Informationen finden Sie auf der offiziellen JSON-Website .

JSON basiert auf zwei Strukturen:

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

JSON-Struktur



JSON-Objektdiagramm

JSON-Array-Diagramm

JSON-Wertediagramm

JSON-String-Diagramm

JSON-Nummerndiagramm

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 eine Zeichenfolge!

Die Leute nehmen oft an, dass alle Javascript-Objekte JSON sind und dass JSON ein Javascript-Objekt ist. Das ist falsch.

In Javascript var x = {x:y}ist 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"}'. xist ein Objekt vom Typ string und kein eigenständiges Objekt. So schalten Sie diese in ein vollwertiges Javascript - Objekt müssen Sie es zunächst analysieren, var x = JSON.parse('{"x":"y"}');, xist jetzt ein Objekt , aber das ist nicht JSON mehr.

Siehe Javascript-Objekt gegen JSON


Wenn Sie mit JSON und JavaScript arbeiten, könnten Sie versucht sein, die evalFunktion zum Auswerten des im Rückruf zurückgegebenen Ergebnisses zu verwenden. Dies wird jedoch nicht empfohlen, da in JSON zwei Zeichen (U + 2028 & U + 2029) gültig sind, in JavaScript jedoch nicht (lesen Sie mehr von dieser hier ).

Daher muss immer versucht werden, das Crockford-Skript zu verwenden, das nach einem gültigen JSON sucht, bevor es ausgewertet wird. Link auf die Skript Erklärung gefunden werden hier und hier ist ein direkter Link auf die JS - Datei. Jeder große Browser hat heutzutage seine eigene Implementierung dafür.

Beispiel für die Verwendung des JSON-Parsers (mit dem json aus dem obigen Codefragment):

//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 andere sehr nützliche Methode stringify. Diese Methode akzeptiert ein JavaScript-Objekt als Parameter und gibt eine Zeichenfolge im JSON-Format zurück. Dies ist nützlich, wenn Sie Daten an den Server zurücksenden möchten :

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 obigen beiden Methoden ( parseund stringify) verwenden auch einen zweiten Parameter, eine Funktion, die für jeden Schlüssel und Wert auf jeder Ebene des Endergebnisses aufgerufen wird und bei der jeder Wert durch das Ergebnis Ihrer eingegebenen Funktion ersetzt wird. (Mehr dazu hier )

Übrigens, für alle da draußen, die glauben, JSON sei nur für JavaScript gedacht, lesen Sie diesen Beitrag , der etwas anderes erklärt und bestätigt.


Verweise


1
Unabhängig davon, wie Informationen serialisiert werden, haben Sie einen Parser, oder? Wen interessiert es also, in welchem ​​Format Sie Daten übertragen, wenn die Implementierungsdetails entfernt werden sollen?
Tom Lehman

6
Wenn Sie Daten zum Client und Server übertragen, ist es meiner Meinung nach ziemlich wichtig, auf Ihre Antwortgrößen zu achten.
Andreas Grech

9
Für die Pedantiker gibt es einige Zeichen, die JSON anders als JavaScript behandelt, wodurch verhindert wird, dass es sich um eine strikte Teilmenge handelt: timelessrepo.com/json-isnt-a-javascript-subset
Jeremy Banks

Wenn Sie sagen, dass es mehr als XML ist, beziehen Sie sich auf die Dateigröße oder hat Lightweight eine räumliche Bedeutung bei der Codierung?
Whatahitson

1
Würden Sie XML durch JSON ersetzen? Ist es das, was du sagst? Wenn ja ... Großartig, XML ist ein Albtraum.
James111

66

Das erklärte Konzept - kein Code oder Fachjargon

Was ist JSON? - Wie ich es meiner Frau TM erklärt habe

Ich: „Es ist im Grunde eine Art, mit jemandem schriftlich zu kommunizieren ... aber mit sehr spezifischen Regeln.

Frau: ja ....?

Ich: Im prosaischen Englisch sind die Regeln ziemlich locker: genau wie beim Käfigkampf. Nicht so bei JSON. Es gibt viele Möglichkeiten, etwas zu beschreiben:

• Beispiel 1: Unsere Familie hat 4 Personen: Sie, ich und 2 Kinder.

• Beispiel 2: Unsere Familie: Sie, ich, kid1 und kid2.

• Beispiel 3: Familie: [du, ich, kid1, kid2]

• Beispiel 4: Wir haben 4 Personen in unserer Familie: Mama, Papa, Kind1 und Kind2.

Frau: Warum verwenden sie nicht einfach Englisch?

Ich: Sie würden, aber denken Sie daran, wir haben es mit Computern zu tun. Ein Computer ist dumm und wird Sätze nicht verstehen können. Wir müssen also wirklich spezifisch sein, wenn Computer beteiligt sind, sonst werden sie verwirrt. Darüber hinaus ist JSON eine ziemlich effiziente Art der Kommunikation, so dass die meisten irrelevanten Dinge herausgeschnitten werden, was ziemlich handlich ist. Wenn Sie unsere Familie mit einem Computer kommunizieren möchten, können Sie dies folgendermaßen tun:

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

…… und das ist im Grunde JSON. Aber denken Sie daran, Sie müssen die JSON-Grammatikregeln befolgen. Wenn Sie gegen diese Regeln verstoßen, versteht ein Computer einfach nicht (dh analysiert), was Sie schreiben.

Frau: Wie schreibe ich in Json?

Ein guter Weg wäre, einen JSON-Serialisierer zu verwenden - eine Bibliothek, die das schwere Heben für Sie erledigt.

Zusammenfassung

JSON ist im Grunde eine Möglichkeit, Daten mit sehr, sehr spezifischen Regeln an jemanden zu übermitteln. Verwenden von Schlüsselwertpaaren und Arrays. Dies ist das erläuterte Konzept. An dieser Stelle lohnt es sich, die oben genannten spezifischen Regeln zu lesen.


48

Kurz gesagt - JSON ist eine Möglichkeit, so zu serialisieren, dass es zu JavaScript-Code wird. Bei der Ausführung (mit eval oder anderweitig) erstellt dieser Code ein JavaScript-Objekt und gibt es zurück, das die von Ihnen serialisierten Daten enthält. Dies ist verfügbar, da JavaScript die folgende Syntax zulässt:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

Sie können dies für verschiedene Zwecke verwenden. Zum einen ist dies eine bequeme Möglichkeit, Daten von Ihrem Server-Backend an Ihren JavaScript-Code zu übergeben. Daher wird dies häufig in AJAX verwendet.

Sie können es auch als eigenständigen Serialisierungsmechanismus verwenden, der einfacher ist und weniger Speicherplatz als XML beansprucht. Es gibt viele Bibliotheken, mit denen Sie Objekte in JSON für verschiedene Programmiersprachen serialisieren und deserialisieren können.


31

Kurz gesagt, es handelt sich um eine Skriptnotation zum Übergeben von Daten. In gewisser Weise eine Alternative zu XML, die nativ grundlegende Datentypen, Arrays und assoziative Arrays unterstützt (Name-Wert-Paare, Objekte genannt, weil sie das darstellen).

Die in JavaScript verwendete Syntax und JSON selbst steht für "JavaScript Object Notation". Es ist jedoch portabel geworden und wird auch in anderen Sprachen verwendet.

Ein nützlicher Link für Details ist hier:

http://secretgeek.net/json_3mins.asp


19

Das JSON-Format wird häufig zum Serialisieren und Übertragen strukturierter Daten über eine Netzwerkverbindung verwendet. Es wird hauptsächlich zum Übertragen von Daten zwischen einem Server und einer Webanwendung verwendet und dient als Alternative zu XML.


16

JSON ist die JavaScript-Objektnotation. Im Vergleich zu XML ist dies eine viel kompaktere Methode zum Übertragen von Datensätzen über Netzwerkverbindungen. Ich schlage vor, JSON in AJAX-ähnlichen Anwendungen zu verwenden, in denen XML ansonsten die "empfohlene" Option wäre. Die Ausführlichkeit von XML erhöht die Downloadzeit und erhöht den Bandbreitenverbrauch ($$$). Sie können den gleichen Effekt mit JSON erzielen, und sein Markup ist fast ausschließlich den Daten selbst und nicht der zugrunde liegenden Struktur gewidmet.


11

Die häufig verwendete kurze Antwort lautet: Wenn Sie AJAX zum Erstellen von Datenanforderungen verwenden, können Sie Objekte problemlos als JSON-Zeichenfolgen senden und zurückgeben. Verfügbare Erweiterungen für die Javascript-Unterstützung für JSON () rufen alle Javascript-Typen auf, um Daten in einer AJAX-Anforderung an den Server zu senden. AJAX-Antworten können Objekte als JSON-Zeichenfolgen zurückgeben, die durch einen einfachen Auswertungsaufruf in Javascript-Objekte konvertiert werden können, z. B. wenn die AJAX-Funktion someAjaxFunctionCallReturningJson zurückgegeben wird

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

Sie könnten in Javascript schreiben

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

JSON kann auch für Webdienst-Nutzdaten verwendet werden, ist jedoch für AJAX-Ergebnisse sehr praktisch.

  • Update (zehn Jahre später): Tun Sie dies nicht, verwenden Sie JSON.parse

1
Mit eval () würde alles ausgewertet. Es ist ein Sicherheitsrisiko.
Thomas Weller

@ThomasWeller Ja, diese Antwort ist uralt. Ich würde jetzt mit JSON.parse gehen. Danke!
Steven A. Lowe

8

Ich mag JSON hauptsächlich, weil es so knapp ist . Für Webinhalte, die komprimiert werden können, ist dies nicht unbedingt eine große Sache (daher ist x html so beliebt). Es gibt jedoch Fälle, in denen dies von Vorteil sein kann.

Zum Beispiel habe ich für ein Projekt Informationen übertragen, die serialisiert und über XMPP übertragen werden mussten . Da die meisten Server die Datenmenge begrenzen, die Sie in einer einzelnen Nachricht übertragen können, fand ich es hilfreich, JSON anstelle der offensichtlichen Alternative XML zu verwenden.

Als zusätzlichen Bonus kennen Sie JSON bereits, wenn Sie mit Python oder Javascript vertraut sind, und können es ohne viel Training interpretieren.


8

Was ist JSON?

JavaScript Object Notation (JSON) ist ein leichtes Datenaustauschformat, das von den Objektliteralen von JavaScript inspiriert ist.

JSON-Werte können bestehen aus:

Objekte (Sammlungen von Name-Wert-Paaren) Arrays (geordnete Wertelisten) Zeichenfolgen (in doppelten Anführungszeichen) Zahlen true, false oder null

JSON ist sprachunabhängig.

JSON mit PHP?

Nach PHP Version 5.2.0 wird die JSON-Erweiterung standardmäßig dekodiert und kodiert.

Json_encode - Gibt die JSON-Darstellung der Werte zurück. Json_decode - Dekodiert den JSON-String. Json_last_error - Gibt den zuletzt aufgetretenen Fehler zurück.

JSON-Syntax und Regeln?

Die JSON-Syntax leitet sich von der JavaScript-Objektnotationssyntax ab:

Daten sind in Name / Wert-Paaren angegeben. Daten werden durch Kommas getrennt. Geschweifte Klammern halten Objekte. Eckige Klammern halten Arrays


4

Wir müssen ein Projekt am College durchführen und hatten ein sehr großes Problem, es heißt Same Origin Policy. Unter anderen Umständen kann Ihre XMLHttpRequest-Methode aus Javascript keine Anforderungen an andere Domänen als die Domäne stellen, in der sich Ihre Site befindet.

Beispielsweise können Sie keine Anfrage an www.otherexample.com stellen, wenn sich Ihre Website auf www.example.com befindet. JSONRequest erlaubt dies, aber Sie erhalten ein Ergebnis im JSON-Format, wenn diese Site dies zulässt (zum Beispiel hat sie einen Webdienst, der Nachrichten in JSON zurückgibt). Das ist ein Problem, bei dem Sie vielleicht JSON verwenden könnten.

Hier ist etwas Praktisches: Yahoo JSON


4

Der Unterschied zwischen JSON und herkömmlicher Syntax wäre wie folgt (in Javascript)

Konventionell

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","mike.Anderson@office.com");

Mit JSON

Wenn wir JSON verwenden, können wir auf unterschiedliche Weise definieren als

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

Das Wichtigste, an das wir uns erinnern müssen, ist, dass wir beim Erstellen der Klasse alles analysieren müssen, wenn wir die "Employee" -Klasse oder das Modal mit 100 Elementen ohne JSON-Methode erstellen müssen. Mit JSON können wir die Objekte jedoch nur inline definieren, wenn ein neues Objekt für die Klasse definiert ist.

Diese Zeile unten ist also die Art und Weise, Dinge mit JSON zu tun (nur eine einfache Art, Dinge zu definieren).

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

2
Das ist nicht gerade JSON - es ist ein Javascript-Objekt (nicht JSON)
Ben Aubin

4

Manchmal wird Technik gegeben, wenn keine erforderlich ist, und obwohl viele der am besten bewerteten Antworten genau technisch und spezifisch sind, denke ich persönlich nicht, dass sie einfacher zu verstehen oder prägnant sind, wie es auf Wikipedia oder in zu finden ist offizielle Dokumentation.

Die Art und Weise, wie ich JSON denke, ist genau das, was es ist - eine Sprache in einer Welt verschiedener Sprachen. Der Unterschied zwischen JSON und anderen Sprachen besteht jedoch darin, dass "jeder" "JSON zusammen mit seiner" Muttersprache "spricht.

Stellen wir uns anhand eines Beispiels aus der Praxis vor, wir hätten drei Personen. Eine Person spricht Igbo als Muttersprache. Die zweite Person möchte mit der ersten Person interagieren, die erste Person spricht jedoch Yoruba als ihre erste Sprache.

Was können wir tun?

Zum Glück wurde die dritte Person in unserem Beispiel englischsprachige, aber auch geschieht , spricht sowohl Igbo und Yoruba als zweite Sprache, und so kann zwischen den ersten beiden Personen als Vermittler fungieren.

In der Programmierwelt ist die erste "Person" Python, die zweite "Person" Ruby und die dritte "Person" JSON, die zufällig Ruby in Python "übersetzen" kann und umgekehrt! Natürlich ist diese Analogie nicht perfekt, aber als zweisprachiger Mensch glaube ich, dass es eine einfache Möglichkeit ist, zu sehen, wie JSON mit anderen Programmiersprachen interagiert.


2

Es ist sehr einfach. JSON steht für Java Script Object Notation. Stellen Sie sich das als Alternative zur Verwendung von XML für die Übertragung von Daten zwischen Softwarekomponenten vor.

Zum Beispiel habe ich kürzlich eine Reihe von Webdiensten geschrieben, die JSON zurückgegeben haben, und einige Javascript-Entwickler haben dann Code geschrieben, der die Dienste aufruft und die in diesem Format zurückgegebenen Informationen verwendet.


2

JSON (Javascript Object Notation) ist ein leichtes Datenformat für den Datenaustausch / die Datenübertragung. Es ist ein Schlüsselwertpaar wie das JavaScript. Die REST-API wird häufig für die Datenübertragung vom Server zum Client verwendet. Heutzutage nutzen viele Social-Media-Sites dies. Obwohl ich dies in Bezug auf Datentypen nicht so robust wie XML sehe. XML hat sehr umfangreiche Datentypen und XSD. JSON fehlt dies etwas.

Bei gleicher Menge an Zeichenfolgendaten ist JSON im Vergleich zu XML leichter, da XML alle öffnenden und schließenden Tags usw. enthält.


0

Im Java-Kontext besteht ein Grund, warum JSON möglicherweise verwendet werden möchte, darin, dass es eine sehr gute Alternative zum Serialisierungsframework von Java darstellt, von dem (historisch) gezeigt wurde, dass es einige ziemlich schwerwiegende Sicherheitslücken aufweist.

Joshua Bloch erörtert dies ausführlich in Punkt 85 "Alternativen zur Java-Serialisierung bevorzugen" (Effective Java 3rd Edition).

Die Serialisierung von Java sollte ursprünglich Datenstrukturen in ein Format übersetzen, das leicht übertragen oder gespeichert werden kann. JSON erfüllt diese Anforderung ohne die oben genannten schwerwiegenden Exploits.


-3

Versuchen Sie den folgenden Code, um Ihre PHP-JSON-Antwort zu analysieren: read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>

Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern.
Nic3500
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.