JSON: grundlegende Verwendung. JSON-Format: Was ist das, wie erstellt und öffnet man eine Datei? Erstellen einer JSON-Datei

💖 Gefällt es dir? Teilen Sie den Link mit Ihren Freunden

JSON (JavaScript Object Notation) ist ein Datenübertragungsformat. Wie der Name schon sagt, basiert das Format auf der Programmiersprache JavaScript, es ist aber auch in anderen Sprachen (Python, Ruby, PHP, Java) verfügbar.

JSON verwendet die Erweiterung .json. Bei der Verwendung in anderen Dateiformate(z. B. .html) Die JSON-Zeichenfolge wird in Anführungszeichen gesetzt oder einer Variablen zugewiesen. Dieses Format lässt sich problemlos zwischen dem Webserver und dem Client oder Browser übertragen.

JSON ist leichtgewichtig und leicht verständlich und eine großartige Alternative zu XML.

Dieses Tutorial führt Sie in die Vorteile, Objekte, allgemeine Struktur und Syntax von JSON ein.

JSON-Syntax und -Struktur

Ein JSON-Objekt liegt in Schlüsselwertform vor und wird normalerweise in geschweiften Klammern geschrieben. Bei der Arbeit mit JSON werden alle Objekte in einer .json-Datei gespeichert, sie können aber auch als separate Objekte im Kontext des Programms existieren.

Das JSON-Objekt sieht folgendermaßen aus:

„Vorname“: „John“,
„last_name“: „Smith“,
„Standort“: „London“,
„online“: wahr,
„Follower“: 987

Dies ist ein sehr einfaches Beispiel. Ein JSON-Objekt kann viele Zeilen enthalten.

Wie Sie sehen, besteht ein Objekt aus Schlüssel-Wert-Paaren, die in eingeschlossen sind Zahnspange. Die meisten Daten in JSON werden als Objekte geschrieben.

Zwischen Schlüssel und Wert wird ein Doppelpunkt gesetzt. Nach jedem Paar müssen Sie ein Komma setzen. Das Ergebnis ist:

„key“: „value“, „key“: „value“, „key“: „value“

Der JSON-Schlüssel befindet sich auf der linken Seite. Der Schlüssel muss in doppelte Anführungszeichen gesetzt werden. Als Schlüssel kann jede gültige Zeichenfolge verwendet werden. Innerhalb eines Objekts müssen alle Schlüssel eindeutig sein. Der Schlüssel kann ein Leerzeichen („Vorname“) enthalten, die Programmierung kann jedoch Probleme beim Zugriff auf einen solchen Schlüssel haben. Daher ist es besser, anstelle eines Leerzeichens einen Unterstrich („Vorname“) zu verwenden.

Die JSON-Werte stehen auf der rechten Seite der Spalte. Als Wert kann jeder einfache Datentyp verwendet werden:

  • Saiten
  • Zahlen
  • Objekte
  • Arrays
  • Boolesche Daten (wahr oder falsch)

Werte können auch durch komplexe Datentypen (zum Beispiel Objekte oder JSON-Arrays) dargestellt werden.

JSON unterstützt eine individuelle Syntax für jeden der oben aufgeführten Datentypen: Wenn der Wert durch eine Zeichenfolge dargestellt wird, wird er in Anführungszeichen gesetzt, wenn es sich jedoch um eine Zahl handelt, ist dies nicht der Fall.

Normalerweise werden Daten in JSON-Dateien in eine Spalte geschrieben, JSON kann jedoch auch in eine Zeile geschrieben werden:

(„Vorname“: „John“, „Nachname“: „Smith“, „online“: wahr,)

Auf diese Weise werden JSON-Daten normalerweise in andere Dateitypen geschrieben.

Durch das Schreiben von JSON-Daten in eine Spalte verbessern Sie die Lesbarkeit der Datei (insbesondere, wenn die Datei viele Daten enthält). JSON ignoriert Leerzeichen zwischen Spalten, sodass Sie diese verwenden können, um Ihre Daten in eine überschaubare Anzahl von Spalten aufzuteilen.

„Vorname“: „John“,
„last_name“: „Smith“,
„online“: wahr

Bitte beachten Sie: JSON-Objekte sind sehr ähnlich JavaScript-Objekte, aber sie haben nicht das gleiche Format. Beispielsweise können Sie Funktionen in JavaScript verwenden, jedoch nicht in JSON.

Der Hauptvorteil von JSON besteht darin, dass Daten in diesem Format von vielen gängigen Programmiersprachen unterstützt werden und daher schnell übertragen werden können.

Jetzt kennen Sie sich aus grundlegende Syntax JSON. JSON-Dateien können jedoch komplexe, hierarchische Strukturen aufweisen, die verschachtelte Arrays und Objekte enthalten.

Komplexe Typen in JSON

JSON kann verschachtelte Objekte und Arrays speichern, die als Wert des ihnen zugewiesenen Schlüssels übergeben werden.

Verschachtelte Objekte

Nachfolgend finden Sie ein Beispiel – die Datei „users.json“, die Benutzerdaten enthält. Für jeden Benutzer

(„john“, „jesse“, „drew“, „jamie“) wird ein verschachteltes Objekt als Wert übergeben, das wiederum aus Schlüsseln und Werten besteht.

Hinweis: Das erste verschachtelte JSON-Objekt wird rot hervorgehoben.

"John" :(
„Benutzername“: „John“,
„Standort“: „London“,
„online“: wahr,
„Follower“: 987

„Jesse“ :(
„Benutzername“: „Jesse“,
„Standort“: „Washington“,
„online“: falsch,
„Follower“: 432

„gezeichnet“ :(
„Benutzername“: „Drew“,
„Standort“: „Paris“,
„online“: falsch,
„Follower“: 321

„Jamie“ :(
„Benutzername“: „Jamie“,
„Standort“: „Berlin“,
„online“: wahr,
„Follower“: 654

Beachten Sie, dass sowohl im verschachtelten Objekt als auch im Hauptobjekt geschweifte Klammern verwendet werden. Kommas in verschachtelten Objekten werden auf die gleiche Weise verwendet wie in regulären Objekten.

Verschachtelte Arrays

Daten können mit in JSON eingeschlossen werden JavaScript-Arrays, die als Werte übergeben werden. JavaScript verwendet eckige Klammern () am Anfang und Ende eines Arrays. Ein Array ist eine geordnete Sammlung von Daten, die verschiedene Datentypen enthalten kann.

Ein Array dient der Übertragung einer großen Datenmenge, die gruppiert werden kann. Versuchen wir zum Beispiel, Benutzerdaten aufzuzeichnen.

{
„Vorname“: „John“,
„last_name“: „Smith“,
„Standort“: „London“,
"Websites" : [

„Beschreibung“: „Arbeit“,
„URL“: „https://www.johnsmithsite.com/“

},
{

„Beschreibung“: „Tutorials“,
„URL“: „https://www.johnsmithsite.com/tutorials“

"sozialen Medien" : [

„Beschreibung“: „Twitter“,
„Link“: „https://twitter.com/johnsmith“

„Beschreibung“: „Facebook“,
„Link“: „https://www.facebook.com/johnsmith“

„Beschreibung“: „Github“,
„Link“: „https://github.com/johnsmith“

Den Schlüsseln „websites“ und „social_media“ werden Arrays als Werte zugewiesen, die in eckige Klammern gesetzt werden.

Mithilfe verschachtelter Arrays und Objekte können Sie eine komplexe Datenhierarchie erstellen.

JSON oder XML?

Mit XML (eXtensible Markup Language) können Sie Daten in einer für Mensch und Maschine leicht verständlichen Form speichern. Das XML-Format wird von einer Vielzahl von Programmiersprachen unterstützt.

XML und JSON haben viele Gemeinsamkeiten. Allerdings erfordert XML viel mehr Text, was bedeutet, dass solche Dateien größer und schwieriger zu lesen und zu schreiben sind. Darüber hinaus wird XML nur mit einem XML-Interpreter verarbeitet, während JSON mit einer einfachen Funktion verarbeitet werden kann. Im Gegensatz zu JSON kann XML keine Arrays speichern.

Vergleichen wir zwei Dateien: Sie enthalten dieselben Daten, aber die erste ist im XML-Format und die zweite in JSON geschrieben.

user.xml

John London

Jesse Washington

Zeichnete Paris

Jamie Berlin

user.json
("Benutzer": [

(„Benutzername“: „John“, „Standort“: „London“),
(„Benutzername“: „Jesse“, „Standort“: „Washington“),
(„Benutzername“: „Drew“, „Standort“: „Paris“),
(„Benutzername“: „JamieMantisShrimp“, „Standort“: „Berlin“)

JSON ist ein sehr kompaktes Format und erfordert nicht so viele Tags wie XML. Darüber hinaus unterstützt XML im Gegensatz zu JSON keine Arrays.

Wenn Sie mit HTML vertraut sind, werden Sie feststellen, dass das XML-Format diesem sehr ähnlich ist (insbesondere die Tags). JSON ist einfacher, erfordert weniger Text und lässt sich beispielsweise einfacher in AJAX-Anwendungen verwenden.

Natürlich muss das Format je nach den Anforderungen der Anwendung gewählt werden.

Tools für JSON

JSON wird häufig in JavaScript verwendet, das Format ist jedoch auch in anderen Programmiersprachen weit verbreitet.

Weitere Informationen zur JSON-Kompatibilität und -Verarbeitung finden Sie auf der Projektwebsite und in der jQuery-Bibliothek.

Es kommt selten vor, JSON von Grund auf zu schreiben. Typischerweise werden Daten aus der Quelle geladen oder in JSON konvertiert. Sie können CSV- oder tabulatorgetrennte Daten mit dem Open-Source-Tool Mr. in JSON konvertieren. Datenkonverter. Um XML in JSON und umgekehrt zu konvertieren, verwenden Sie utilities-online.info. Überprüfen Sie beim Arbeiten mit automatischen Werkzeugen unbedingt die Ergebnisse.

JSON-Dateien (einschließlich konvertierter Daten) können mit dem JSONLint-Dienst überprüft werden. Informationen zum Testen von JSON in einem Webentwicklungskontext finden Sie unter JSFiddle.

Abschluss

JSON ist ein einfaches und leichtes Datenformat. JSON-Dateien lassen sich einfach übertragen, speichern und verwenden.

Heutzutage wird JSON häufig in APIs verwendet.

Bekanntmachung

JSON-Website-Dateiformat

JSON-Dateien werden verwendet, um Strukturen einfacher Datensätze in einem für Menschen lesbaren textbasierten Format zu speichern. JSON-Dateien waren ursprünglich eng mit der Programmiersprache JavaScript verwandt, aber aufgrund der Tatsache, dass dieser Moment Dieses Format unterstützt eine große Anzahl von Software-APIs; es kann als ein Format betrachtet werden, das an keine Programmiersprache gebunden ist. Diese Alternative zum XML-Format wird am häufigsten von Ajax-Webanwendungen verwendet.

Technische Detailsüber JSON-Dateien

Als Datenaustauschdateien werden JSON-Dateien verwendet. Dieser Austausch findet häufig zwischen Computern statt, die über das Internet verbunden sind. Daher kommt es sehr selten vor, dass Dateien mit der Erweiterung JSON auf der Festplatte eines Computers gespeichert werden. Einige Anwendungen verwenden jedoch immer noch dieses Format. Zum Beispiel Daten Google-Profil+ werden im JSON-Format und im Webbrowser gespeichert und geladen Mozilla Firefox verwendet Dateien dieses Formats zur Speicherung Sicherungskopien Lesezeichen.

Weitere Informationenüber das JSON-Format

Variablen, Arrays und Objekte sind eine bekannte und praktische Form der Datendarstellung. Es ist üblich, Daten in der Browsersprache JavaScript zu beschreiben, was in der Sprache nicht erforderlich ist PHP-Server. Das JSON-Format ermöglicht es Ihnen, sie zu einem Ganzen zusammenzufassen und sich nicht auf die Programmiersprache zu konzentrieren. In diesem Fall werden die Daten zu Paaren: „Name = Wert“. Der Wert in jedem von ihnen kann auch eine Sammlung solcher Paare sein.

Es ist üblich, JSON mit geschweiften Klammern zu verknüpfen, und letzteres ist durchaus berechtigt, da das JSON-Format = JavaScript Object Notation ist. In den letzten besonders dynamischen Jahren hat sich viel verändert. Was für einen bestimmten Zweck geschaffen wurde, brachte oft unerwartete Ergebnisse oder eröffnete neue Horizonte.

Datenaustausch: Browser – Server

Die AJAX-Technologie ist zur traditionellen, regelmäßigen Seitenaktualisierung geworden vollständig ist nicht mehr beliebt. Wenn ein Besucher eine Website öffnet, initiiert er eine Reihe teilweiser Datenaustausche, bei denen sich bestimmte Seiten nur an der relevanten Stelle ändern.

Es wird angenommen, dass die Entstehung von JSON mit der Verwendung von AJAX zusammenhängt, aber tatsächlich haben Assoziativ und seine Objektnotation (Merkmale der Syntax zur Beschreibung und Verwendung von Objekten) eine viel stärkere Beziehung zu JSON als der Datenaustausch zwischen dem Browser und dem Server.

Da der Inhalt der Seiten moderner Websites wirklich „massiv“ (umfangreich) geworden ist, hat die Effizienz des Formats für den Datenaustausch besondere Bedeutung erlangt. Das soll nicht heißen, dass JSON zu einer neuen Datendarstellung geworden ist, aber die Tatsache, dass es schon lange ein Element der JavaScript-Syntax ist, ist von Bedeutung.

Die Verwendung von Kyrillisch bei der Benennung von Variablen ist ein sehr unerwartetes Phänomen (Unsinn), funktioniert aber letzte Version Chrome, Firefox und sogar Internet Explorer 11.

Kyrillisch und JSON

Natürlich macht es keinen Sinn, dieses völlig unerwartete Phänomen zu verwenden, wenn man bedenkt, wie leicht die Werte von Variablen, die in russischen Buchstaben geschrieben sind, zu Unsinn werden: Was können wir über Namen sagen, insbesondere über externe?

Es ist fraglich, ob die Initiative in kyrillischen Namen von der externen Umgebung des Browsers unterstützt wird, mit der er ständig zu tun hat. Diese Tatsache verdient jedoch aus dem einfachen Grund Beachtung, dass das JSON-Format die Möglichkeit bietet, Namen und Werte so zu schreiben, wie es der Entwickler wünscht. Dies ist wichtig, da in jeder Aufgabe die Beschreibung des Anwendungsbereichs nach Bedarf die Fehlersuche deutlich vereinfacht und die Fehleranzahl reduziert.

Es spielt keine Rolle, was genau die Grundlage der syntaktischen Innovation – JSON – war, wichtig ist, dass sie das rechtliche Recht und die echte Möglichkeit gibt, die Entsprechung festzulegen: „jeder Name = jeder Wert“.

Wir müssen der JavaScript-Sprache Tribut zollen: Was die Syntax vorsieht, verpflichtet den Entwickler nicht und zwingt ihm nichts auf. Der Entwickler nutzt die Sprachsyntax frei, um ein Datenmodell und einen Algorithmus für deren Verwendung optimal zu gestalten.

PHP und JSON

Durch die Annahme von Daten im JSON-Format bietet der Server (insbesondere über PHP) die Möglichkeit, diese unverändert zu verarbeiten und das Ergebnis in einem ähnlichen Format an den Browser zurückzugeben. PHP-Quellarray:

  • $cJSON = Array („a“=> „alfa“, „b“=> „beta“, „g“=> „gamma“).

Zur Übermittlung an den Browser in JSON konvertieren:

  • $cJS = json_encode($cJSON).

Ergebnis:

  • („a“: „alfa“, „b“: „beta“, „g“: „gamma“).

Die auf dem Foto gezeigte Verschachtelung ist zulässig.

Hier wurde das generierte Array mit einem neuen Element „in sich selbst“ mit dem automatischen Index „0“ und dann wieder mit dem angegebenen Index „z“ hinzugefügt.

Json_decode() konvertiert einen JSON-String in ein PHP-Array. Ähnliche Ergebnisse können durch Manipulieren von Funktionen und explosion() erzielt werden. In manchen Fällen ist diese Option vorzuziehen.

Verschachtelungsebene

Elemente können sowohl browserseitig als auch serverseitig verschachtelt werden. In der Praxis bietet das JSON-Format (Standardbeschreibung RFC 4627) deutlich mehr als 4 Verschachtelungsebenen, diese Funktion sollte jedoch nicht missbraucht werden.

Es ist am besten, niemals über das angemessene Maß hinauszugehen. Dadurch wird der Code lesbar und erleichtert das Debuggen und Verstehen für andere Entwickler.

JSON wird allgemein als Datenkonstrukt bezeichnet, das einfacher als XML und sowohl für Menschen als auch für Computer verständlich ist. Dies trifft zu, wenn die Datenmenge gering ist und der Entwickler die Verschachtelungsebene mit Bedacht gewählt hat. In allen anderen Fällen ist es sowohl auf der Browserseite als auch auf der Serverseite schwierig, die Anzahl der Klammern zu zählen und zu verstehen.

JSON-Dateien

Der Einsatz von JSON beschränkt sich in der Praxis oft nicht auf eine für Menschen lesbare kurze Zeichenfolge. Jede Datenkonstruktion ist immer pragmatisch. Gleichzeitig kann JSON effektiv sowohl in realen Aufgabendaten (Unternehmensmitarbeiter) als auch zur Implementierung temporärer Daten (Objekt-Cache) eingesetzt werden.

Unternehmensmitarbeiter und JSON-Format: Beispiel

Normalerweise besteht eine Aufzeichnung über eine Person aus einem Nachnamen, einem Vornamen, einem Vatersnamen, einem Geburtsjahr, einem Fachgebiet, einer Ausbildung usw. und einigen anderen einfachen Werten. Selbst in besonders anspruchsvollen Unternehmen wird ein Rekord von einer Person nicht mehr als ein Dutzend oder zwei Felder betragen. Dies ist wahrnehmbar und kann in einem Datenbankstring abgelegt werden.

Wenn ein Unternehmen mehrere Mitarbeiter beschäftigt, ist das eine Sache, wenn es Zehntausende sind, ist das eine ganz andere. Sie können die Datenbank weiterhin verwenden, die Speicherung als Datei erscheint jedoch praktischer und benutzerfreundlicher.

JSON ist normal Textdatei. Der Fall mit der Besetzungstabelle versteht sich von selbst. Man kann es immer lesen. Das Öffnen und Bearbeiten ist auch in jedem Texteditor möglich, der nicht die Angewohnheit hat, dem Inhalt der Datei eigene Serviceinformationen hinzuzufügen. Im Allgemeinen ist *.json sowohl im Browser als auch in der Datei reiner Text – ein String.

Das Foto zeigt den Cache des Objekts, das das Bild bildet, ein Beispiel.

Dies ist ein Beispiel für den Inhalt einer Datei, die von einer Website generiert wurde, die farbigen 3D-Druck auf Tassen und Keramik anbietet. Natürlich ist es bei einem solchen JSON-Format sehr problematisch zu entscheiden, wie man es öffnet. In diesem und ähnlichen Fällen gibt es jedoch keine Probleme beim Lesen der Datei: PHP liest die Datei, analysiert sie und übergibt sie an den Browser. Die vom Besucher geänderten Daten werden an den Server zurückgegeben und zurückgeschrieben.

In diesem Anwendungsfall fungiert die Datei als Variable, die außerhalb des Codes gespeichert wird. Bei Bedarf erhält die Variable einen Wert aus der Datei, und wenn er vom Besucher im von der Site bereitgestellten Dialog geändert wird, werden alle Änderungen unverändert aufgezeichnet. Es ist nicht erforderlich, den Inhalt der Datei zu lesen und zu überprüfen.

JSON wird häufig zum Speichern und Verwenden von Serviceinformationen verwendet. Dabei handelt es sich nicht um eine Besetzungstabelle, und weder der Entwickler noch der Website-Besucher müssen sie sehen.

XML und JSON

„Alles hat seine Zeit“ ist ein klassisches Wissen, das bereits vor dem Aufkommen der Programmierung als Axiom galt. „Nichts erscheint einfach“ – das geschah auch, bevor der Mensch das erste verständliche Programm in einer künstlichen Sprache schrieb.

Datenformate entstehen aus realen Bedürfnissen und basieren auf erlangtem Wissen. HTML hat seinen eigenen Pfad, XML hat seinen eigenen Pfad und JSON ist eine auf andere Sprachen erweiterte JavaScript-Objektlogik. Ein Vergleich mit dem anderen ist nicht das Beste. Jedem das Seine.

XML meistert seine Aufgaben wunderbar und wird offensichtlich nicht zur Geschichte werden. Und JSON wurde bis 2006 verwendet; nur sah es nicht jeder Entwickler als seine Pflicht an, bestimmte Optionen zur Darstellung seiner Daten zu deklarieren.

In der Praxis gab es Fälle, in denen Programme in BASIC geschrieben wurden, die nicht JSON als solches verwendeten, sondern „Name = Wert“-Paare perfekt speicherten und sie den richtigen Algorithmen zur richtigen Zeit zur Verfügung stellten.

Sonderzeichen („`“, „~“, „|“, ...) und Datenformate

Die Gewohnheit, in JavaScript mit assoziativen Arrays und Objekten zu arbeiten, macht die Verwendung von JSON natürlich und bequem. Dies ist ein wirklich großartiges Format, aber die Fähigkeit, Strings und Arrays zu trennen und zu verbinden sowie Strings und Arrays zu manipulieren, hat viel tiefere Wurzeln.

Die Join/Split-Funktionen der JavaScript-Sprache und implode/explode der PHP-Sprache ermöglichen eine bequeme und effiziente Nutzung beider Formate XML-Daten, JSON und Ihre eigene Version. Letzteres ist oft optimal, während die ersten beiden ideal für allgemeine Einsatzmöglichkeiten sind. Wenn Informationen an einen anderen Entwickler, Server, eine andere Datei oder Datenbank übertragen werden, gibt es keinen besseren Weg, XML und JSON zu finden. Jeder arbeitet mit ihnen, sodass die Übertragung/der Empfang von Informationen keine Kommentare erfordert.

Verwendung von JSON in Android

Das Lesen und Schreiben von Daten im JSON-Format in Android ist nicht nur die Norm, sondern es gibt auch viele Objekte, die sich auf die Arbeit mit diesem speziellen Datenformat konzentrieren.

In diesem Fall wird das JSON-Format verwendet. Das mag stimmen, aber die Frage ist nicht die Phänomenalität sozialer Netzwerke, sondern die Tatsache, dass die Darstellung von Informationen im Format „Name = Wert“ sowohl für die Programmierung als auch für die Nutzung wirklich praktisch ist. Im Gegensatz zum strengen und komplexen „XML“ ist dies wirklich ein benutzerfreundliches Format.

Assoziative Arrays

Es kommt vor, dass Variablen beschrieben werden müssen (JavaScript) oder zumindest ein Anfangswert angegeben werden muss (PHP). In beiden Fällen kann die Variable ihren Typ sehr leicht ändern. Die Sprache führt diese Konvertierung bei Bedarf automatisch durch.

Aber warum sollte die Variable nicht auch ihren Namen ändern, während der Ausführung des Algorithmus erscheinen und verschwinden, wenn sie nicht mehr benötigt wird? Assoziative Arrays lösen dieses Problem, aber wenn solche relativ dynamischen Variablen verwendet werden, folgen der Array-Name und die entsprechenden syntaktischen Konstrukte dem Ort, an dem sie verwendet werden.

Dieser Umstand ist in PHP besonders ausgeprägt, aber Sie können ihn in Kauf nehmen, wie beispielsweise mit dem „$“-Symbol im Variablennamen und der „$this->“-Kombination innerhalb des Objekts. Wenn man gleichzeitig in JavaScript und PHP programmiert, ist man zunächst wirklich erstaunt, wie unterschiedlich alles ist, aber dann wird alles so vertraut und natürlich ...

Assoziatives Array -> JSON

In diesem Beispiel wird ein *.docx-Dokument mit der PHPOffice/PHPWord-Bibliothek erstellt und das aProperties-Array enthält die Eigenschaften dieses Dokuments (Autor, Firma, Titel, Kategorie, Erstellungsdatum...).

Das zweite Array enthält Daten für die Seite:

  • Ausrichtung (Querformat oder Normal);
  • vertikale und horizontale Abmessungen;
  • Einrückungen (Ränder links, oben, unten, rechts);
  • Kopf-und Fußzeilen.

Das Dokument wird auf dem Server generiert, auf dem die PHPOffice/PHPWord-Bibliothek installiert ist. Auf der Website können Sie die Werte dieser Arrays mithilfe von JavaScript verwalten. Das Ergebnis im JSON-Format wird an den Server zurückgegeben und in PHP-Algorithmen, in seinen Konstrukten, also in Arrays, verwendet.

Dynamische Variablen

Das JSON-Format löst das Problem dynamischer Variablen. Hier können Sie Variablen ohne unnötigen syntaktischen Aufwand erstellen, ändern und löschen. Es sieht gut aus und wird in JavaScript verwendet.

In diesem Beispiel ruft die Funktion GetOjInfo() den Wertnamen und den Wert von einem Objekt ab. Anfänglich besteht das der Variablen ojInfo zugewiesene JSON-Zeichenfolgenobjekt aus drei Elementen: Name, Alter und Arbeit. Etwas später wird die Statusvariable hinzugefügt.

Nach dem ersten Löschoperator verliert die ojInfo-Zeile das Alterselement, nach dem zweiten Löschoperator verliert sie das Arbeitselement. Wenn wir davon ausgehen, dass es sich bei dieser Zeichenfolge um eine Auswahl von Variablen handelt, die eine bestimmte Bedeutung haben, können Sie mit JSON tatsächlich beliebige Mengen davon außerhalb des operativen Bereichs (Syntax) der Beschreibung und Verarbeitung der JavaScript-Sprache erstellen, ändern und löschen.

Das JSON-Format wurde für diese Option nicht konzipiert, ist aber möglich, praktisch und bequem.

) und zwischen den Servern selbst (HTTP-Softwareschnittstellen). Das JSON-Format eignet sich auch gut zum Speichern komplexer dynamischer Strukturen in relationalen Datenbanken oder Dateicaches.

Da JSON eine Teilmenge der JavaScript-Syntax ist, kann es mit der integrierten Funktion eval() schnell deserialisiert werden. Darüber hinaus besteht die Möglichkeit, voll funktionsfähige JavaScript-Funktionen einzufügen. In PHP ist ab Version 5.2.0 die JSON-Unterstützung im Kern in Form der Funktionen json_decode() und json_encode() enthalten, die ihrerseits JSON-Datentypen in die entsprechenden PHP-Typen und umgekehrt konvertieren.

Syntax

JSON basiert auf zwei Strukturen:

  • Eine Reihe von Schlüssel/Wert-Paaren. In verschiedenen Sprachen ist dies implementiert als ein Objekt, Datensatz, Struktur, Wörterbuch, Hash-Tabelle, Schlüsselliste oder assoziatives Array. Der Schlüssel kann nur eine Zeichenfolge sein, der Wert kann nur eine beliebige Form haben.
  • Ein nummerierter Satz von Werten. In vielen Sprachen ist dies implementiert als Array, Vektor, Liste oder Sequenz.

Dies sind universelle Datenstrukturen. Theoretisch alles moderne Sprachen Die Programmierung unterstützt sie in der einen oder anderen Form. Da JSON zum Austausch von Daten zwischen verschiedenen Programmiersprachen verwendet wird, ist es sinnvoll, es auf diesen Strukturen aufzubauen.

Die folgenden Formen werden in JSON verwendet:

  • Ein Objekt ist eine ungeordnete Menge von Name/Wert-Paaren, die in geschweifte Klammern () eingeschlossen sind. Zwischen Name und Wert steht ein Symbol ": " , und Name/Wert-Paare werden durch Kommas getrennt.
  • Ein Array (eindimensional) ist eine Menge von Werten, die fortlaufende Nummern (Indizes) haben. Das Array ist in eckige Klammern eingeschlossen. Werte werden durch Kommas getrennt.
  • Der Wert kann sein Linie in doppelten Anführungszeichen, Nummer, Wert WAHR oder FALSCH, Objekt, Array, oder Wert Null. Diese Strukturen können ineinander verschachtelt sein.
  • Eine Zeichenfolge ist ein geordneter Satz von null oder mehr Unicode-Zeichen, eingeschlossen in doppelte Anführungszeichen und mit Backslash-Escape-Sequenzen. Die Zeichen werden als einfache Zeichenfolge dargestellt.
  • Der Name ist eine Zeichenfolge.

Linie sehr ähnlich zu einem String in den Sprachen und Java. Nummer Auch einer C- oder Java-Zahl sehr ähnlich, außer dass nur das Dezimalformat verwendet wird. Zwischen zwei beliebigen Zeichen können Leerzeichen eingefügt werden.

Das folgende Beispiel zeigt eine JSON-Darstellung eines Objekts, das eine Person beschreibt. Das Objekt hat Zeichenfolge Vor- und Nachnamenfelder, ein Objekt, das die Adresse beschreibt, und ein Array mit einer Liste von Telefonnummern.

("firstName" : "Ivan", "lastName" : "Ivanov" , "address" : ("streetAddress" : "Moskovskoe sh., 101, apt. 101" , "city" : "Leningrad" , "postalCode" : 101101), „phoneNumbers“: [ „812 123-1234“, „916 123-4567“ ] )

In XML würde eine solche Struktur etwa so aussehen:

Ivan Ivanov Moskovskoe sh., 101, Apt. 101 Leningrad 101101 812 123-1234 916 123-4567

812 123-1234 916 123-4567

Vergleich mit YAML

Sowohl funktional als auch syntaktisch ist JSON eine Teilmenge der YAML-Sprache. Konkret heißt es in der YAML 1.2-Spezifikation, dass „jede JSON-Datei eine gültige YAML-Datei ist“. Der gängigste YAML-Parser kann auch JSON verarbeiten. Die YAML-Spezifikation vor Version 1.2 deckte JSON nicht vollständig ab, hauptsächlich aufgrund der fehlenden nativen Unterstützung für UTF-32 in YAML sowie der Anforderung eines Leerzeichens nach dem Komma-Trennzeichen. Darüber hinaus enthielt die JSON-Spezifikation Kommentare im Stil /* */.

Der wichtigste Unterschied in YAML ist der Satz von Syntaxerweiterungen, die in JSON keine Entsprechungen haben:

Relational: YAML unterstützt relationale Daten: In einem YAML-Dokument können Sie auf einen Anker verweisen, der früher in einer Datei/einem Stream vorkam. Auf diese Weise können rekursive Strukturen ausgedrückt werden. Erweiterbar: YAML unterstützt erweiterbare Datentypen über Grundelemente hinaus (z. B. Zeichenfolgen, Zahlen, boolesche Werte). Blöcke: In YAML ist die Syntax für eingerückte Blöcke verfügbar. Es ermöglicht Ihnen, strukturierte Daten zu beschreiben, ohne unnötige Symbole (alle Arten von Klammern, Anführungszeichen usw.) zu verwenden.

JSON-Schema

JSON Schema ist eine der Sprachen zur Beschreibung der Struktur eines JSON-Dokuments. Verwendet JSON-Syntax. Basierend auf den Konzepten von XML Schema, RelaxNG, Kwalify. JSON Schema ist eine selbstbeschreibende Sprache: Bei Verwendung können dieselben Serialisierungs-/Deserialisierungstools verwendet werden, um Daten zu verarbeiten und ihre Gültigkeit zu beschreiben.

Verwendung von JSON in Ajax

Der folgende Javascript-Beispielcode zeigt, wie ein Browser XMLHttpRequest verwenden kann, um ein JSON-formatiertes Objekt vom Server anzufordern (die Serverseite des Programms wird weggelassen; sie muss den Code enthalten, der die Daten als JSON-Zeichenfolge als Antwort auf Anfragen von sendet URL).

Var the_object; var http_request = new XMLHttpRequest() ; http_request.open("GET", url, true); http_request.send(null); http_request.onreadystatechange = function () ( if ( http_request.readyState == 4 ) ( if ( http_request.status == 200 ) ( the_object = JSON.parse ( http_request.responseText ) ; ) else ( warning( „Es gab ein Problem mit die URL." ) ; ) http_request = null ; ) ) ;

Beachten Sie, dass dieses Beispiel für die Verwendung von XMLHttpRequest nicht für alle Browser universell ist (bei Browsern, die auf Internet Explorer, Opera, Safari und Mozilla basieren, sollte es einige Unterschiede im Code geben). Die Verwendung von XMLHttpRequest ist aufgrund der Same-Origin-Policy eingeschränkt: Die URL der Antwort auf die Anfrage muss sich in derselben DNS-Domäne befinden wie der Server, auf dem sich die Seite befindet, die die Antwort anfordert. Eine Alternative ist der JSONP-Ansatz, bei dem ein verschlüsselter Funktionsaufruf verwendet wird, der zwischen Client und Server weitergeleitet wird, sodass der Client JSON-codierte Daten von Drittanbieterdomänen laden und den Aufrufer über den Abschluss benachrichtigen kann, obwohl dies einige Sicherheitsrisiken mit sich bringt zusätzliche Serveranforderungen.

Alternativ kann der Seitencode Elemente verwenden, um JSON-Daten asynchron anzufordern, oder einfach . Diese Ansätze waren vor der breiten Unterstützung von XMLHttpRequest üblich.

Sie können dieselbe Ursprungsrichtlinie auch verwenden, um JSON-Daten mithilfe dynamischer Tags zu übertragen. Dies führt jedoch zu anfälligem Code. Als sicherere Alternative wurde die Verwendung vorgeschlagen JSONRequest.

Sicherheitsfragen

Obwohl JSON dazu gedacht ist, Daten in serialisierter Form zu übermitteln, folgt seine Syntax dem folgenden JavaScript-Syntax und dies führt zu einer Reihe von Sicherheitsproblemen. Um von einer externen Quelle im JSON-Format empfangene Daten zu verarbeiten, wird häufig die Funktion eval() ohne vorherige Validierung darauf angewendet.

JavaScript eval()

Da JSON ein syntaktisch korrekter Teil des JavaScript-Codes zu sein scheint, besteht die einfachste Möglichkeit zum Parsen von JSON-Daten in einem JavaScript-Programm in der Verwendung des integrierten Codes JavaScript-Funktionen eval() , das zum Ausführen von JavaScript-Ausdrücken konzipiert ist. Bei diesem Ansatz besteht keine Notwendigkeit, zusätzliche Parser zu verwenden.

Die eval()-Technik macht das System angreifbar, wenn die Quelle der verwendeten JSON-Daten nicht vertrauenswürdig ist ( Englisch). Solche Daten können bösartiger JavaScript-Code für Code-Injection-Angriffe sein ( Englisch). Mithilfe dieser Schwachstelle ist es möglich, Daten zu stehlen und die Authentifizierung zu fälschen. Die Schwachstelle kann jedoch durch den Einsatz zusätzlicher Datenvalidierungstools behoben werden. Beispielsweise können vor der Ausführung von eval() von einer externen Quelle empfangene Daten mithilfe regulärer Ausdrücke validiert werden. Der RFC, der JSON definiert, schlägt vor, den folgenden Code zu verwenden, um zu überprüfen, ob er dem JSON-Format entspricht

Var my_JSON_object = ! (/[^,:()\[\]0-9.\-+Eaeflnr-u \n\r\t]/ .test ( text.replace (/"(\\.|[^"\\] )*"/g , "" ) ) ) && eval("(" + text + ")" );

Wie eine sicherere Alternative zu eval() vorgeschlagen wurde neue Funktion parseJSON(), das nur JSON-Daten verarbeiten kann. Es wurde in Version 4 des ECMAScript-Standards eingeführt und wird im Artikel „JSON: A Low-Fat Alternative to XML“ beschrieben. Es ist derzeit als JavaScript-Bibliothek verfügbar und wird in der fünften Ausgabe von ECMAScript enthalten sein.

Eingebetteter JSON

Neuere Versionen von Webbrowsern verfügen über eine integrierte Unterstützung für JSON und können es verarbeiten, ohne die Funktion eval() aufzurufen, was zu dem beschriebenen Problem führt. Die JSON-Verarbeitung ist in diesem Fall normalerweise schneller. Im Juni 2009 verfügten die folgenden Browser über integrierte JSON-Unterstützung:

Mindestens fünf beliebte JavaScript-Bibliotheken verwenden Inline-JSON, sofern verfügbar:

Fälschung domänenübergreifender Anfragen

Eine schlechte Verwendung von JSON macht Websites anfällig für Cross-Site-Request-Forgery (CSRF oder XSRF). Da das Tag die Verwendung einer Quelle zulässt, die nicht zur gleichen Domäne gehört wie die Ressource, die es verwendet, ermöglicht es die Ausführung von Code unter dem Deckmantel von JSON-Daten im Kontext einer beliebigen Seite, wodurch es möglich wird, Passwörter zu kompromittieren oder andere vertrauliche Informationen von Benutzern, die auf der Seite authentifiziert wurden. Eine andere Website.

Dies scheint nur dann ein Problem zu sein, wenn die JSON-Daten vertrauliche Informationen enthalten, die von Dritten kompromittiert werden könnten, und wenn der Server auf einer Single-Origin-Richtlinie basiert ( Englisch), Blockieren des Zugriffs auf Daten, wenn eine externe Anfrage erkannt wird. Dies stellt kein Problem dar, wenn der Server die Gültigkeit der Anfrage bestimmt und nur dann Daten bereitstellt, wenn diese korrekt sind. Hierzu können HTTP-Cookies nicht herangezogen werden. Die ausschließliche Verwendung von HTTP-Cookies wird von Cross-Site-Request-Forgery genutzt.

JSONP und JSONPP

JSONP (JSON Padding) oder „JSON mit Padding“ ist eine Erweiterung von JSON, wenn der Name einer Callback-Funktion als Eingabeargument angegeben wird.

Die Technologie basiert auf der Tatsache, dass die Sicherheitsrichtlinie des Browsers die Verwendung des Tags für den Zugriff auf andere Server als den Server, von dem die Seite geladen wurde, zulässt.

Ohne die Verwendung der JSONP-Technologie (d. h. nur die Verwendung der JSON-Datenkodierung) kann der Server nur Daten zurückgeben. Zum Beispiel so:

(„Papier“: „A4“, „Anzahl“: 5)

Hierbei handelt es sich jedoch lediglich um Daten, die keinen Einfluss auf den Browser haben.

Mithilfe der JSONP-Technik wird der Name der Callback-Funktion in der Call-Zeile (GET) an den Drittanbieter-Server übergeben:

Hier enthält der jsonp-Parameter den Namen der Callback-Funktion parseResponse.

Nun kann der fremde Server example.com den folgenden Code zurückgeben:

ParseResponse(( "paper" : "A4", "count" : 5 ) )

Der Code ruft nun die Javascript-Funktion der ersten Domain auf.

Die Idee wurde ursprünglich im MacPython-Blog im Jahr 2005 vorgeschlagen und wird derzeit von vielen Web 2.0-Anwendungen wie Dojo Toolkit Applications, Google Toolkit Applications und zanox Web Services verwendet. Es wurden weitere Erweiterungen dieses Protokolls vorgeschlagen, um zusätzliche Argumente aufzunehmen, beispielsweise die Unterstützung von S3DB-Webdiensten durch JSONPP.

Da JSONP Skript-Tags verwendet, sind Aufrufe im Wesentlichen offen für die Welt. Aus diesem Grund ist JSONP möglicherweise nicht für die Speicherung sensibler Daten geeignet.

Durch die Aktivierung von Skript-Tags von Remote-Sites können diese beliebige Inhalte auf der Site übertragen. Wenn die Remote-Site Schwachstellen aufweist, die das Einschleusen von Javascript ermöglichen, ist möglicherweise auch die Original-Site davon betroffen.

JSONPP (parametrisiertes JSON mit Auffüllung) Parametrisiertes JSON mit Auffüllung – Entwicklung der JSONP-Idee

JSONPP enthält die Quell-URL, den Namen der Funktion, die die JSON-Daten verarbeitet, eine Zeile zur Auswertung nach dem Empfang der Daten und eine Zeile zur Auswertung nach Abschluss der Datenverarbeitung:

JSON_call(SRC, JSONP, JSONPP, ONLOAD) ;

dreht sich schließlich um

Ans = JSONP(SRC) ( eval(JSONPP(ans) ) ; eval(ONLOAD) ; )

Im Allgemeinen ist die Anzahl der Parameter für die JSONPP-Idee selbst nicht wichtig. SRC, JSONP, JSONPP (und deren Verarbeitung auf der Serverseite und dann auf der Clientseite) reichen aus, um JSONPP zu sein.

Schauen wir uns das Beispiel der Arbeit mit dem S3DB-Dienst an.

Funktion s3db_jsonpp_call(src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head" ) [ 0 ] ; var script = document.createElement ("script" ); script.id = call; script.type = "text/javascript" ; // mit aufgefülltem, parametrisiertem JSON src = src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ "&onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (script) ; // Antwort abrufen) function s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; return ans ; ) Funktion remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; return false ; )

Im Beispiel erstellt die Funktion s3db_jsonpp_call() ein Skriptelement im DOM im Kopfteil, dessen src dem JSONPP-Aufruf entspricht.

Nach Erhalt einer Antwort vom Server wird s3db_jsonpp() aufgerufen – es wird in den Aufrufparametern übergeben, wie es gemäß den JSONP-Regeln sein sollte.

Innerhalb von s3db_jsonpp() wird eval(jsonpp) ausgelöst und gibt den Wert ans zurück.

Der Aufruf von eval(onload) führt zur Ausführung von „remove_element_by_id()“ mit der ID des erstellten Skripts im Kopf und letztendlich zu dessen Löschung, da es ohnehin nicht verwendet wird, da die ID im Beispiel ganz am Anfang zufällig generiert wurde die Funktion s3db_jsonpp_call(). Dieser Aufruf befindet sich in der Serverantwort.

Objektreferenzen

Der JSON-Standard unterstützt keine Objektverweise, aber das Dojo Toolkit zeigt, wie Standard-JSON solche Verweise mithilfe zusätzlicher Konventionen unterstützen kann. Insbesondere bietet das Modul dojox.json.ref Unterstützung für verschiedene Formen von Links, einschließlich zirkulärer, mehrfacher, dokumentübergreifender und Lazy-Links.

Siehe auch Notizen
  • YAML Ain't Markup Language (YAML™) Version 1.2 (Englisch) . - Arbeitsentwurf 11.05.2008. (unzugänglicher Link - Geschichte) Abgerufen am 24. September 2009.
  • . RedHanded (07. April 2005). Abgerufen am 25. September 2012. .
  • Json.Com JSON-Schema-Vorschlag (unzugänglicher Link – Geschichte)
  • RFC 4627
  • JSON: Die fettfreie Alternative zu XML. Archiviert
  • json2.js (Englisch) . Archiviert vom Original am 12. Februar 2012. Abgerufen am 24. September 2009.
  • Verwendung von eingebettetem JSON.
  • Eingebetteter JSON in IE8. Archiviert vom Original am 12. Februar 2012.
  • In Opera Presto 2.5 unterstützte Webspezifikationen (Englisch) (10. März 2010). Archiviert vom Original am 12. Februar 2012. Abgerufen am 29. März 2010.
  • ES 3.1-Implementierung des JSON-Objekts.
  • Ticket #4429lang=de . Archiviert vom Original am 12. Februar 2012.
  • Ticket Nr. 4429 (22. Mai 2009). Archiviert vom Original am 12. Februar 2012. Abgerufen am 3. Juli 2009.
  • Ticket #8111lang=de . Archiviert vom Original am 12. Februar 2012.
  • MooTools Core & More 1.3.1. Archiviert vom Original am 12. Februar 2012.
  • YUI 2: JSON-Dienstprogramm (1. September 2009). Archiviert vom Original am 12. Februar 2012. Abgerufen am 22. Oktober 2009.
  • Lernen Sie JSON (7. April 2010). Archiviert vom Original am 12. Februar 2012. Abgerufen am 7. April 2010.
  • Jeremy Grossmann Erweiterte Angriffstechniken gegen Webanwendungen mit GMail. WhiteHat-Sicherheit. Archiviert vom Original am 12. Februar 2012. Abgerufen am 23. September 2009.
  • from __future__ import * » Remote JSON - JSONP . Bob.pythonmac.org. Archiviert vom Original am 12. Februar 2012. Abgerufen am 8. September 2008.
  • Almeida, Jonas (11. Juni 2008). „JSON, JSONP, JSONPP? "(S3DB). Abgerufen am 26.04.2009.
  • RIAspot JSON P für Cross Site XHR .(unzugänglicher Link - Geschichte)
  • JSON-Referenzierung in Dojo. Archiviert vom Original am 12. Februar 2012.
  • Links
    • Offizielle Homepage im russischen Format
    • json.js, json2.js ist eine von Douglas Crockford entwickelte Bibliothek für die Arbeit mit JSON-Daten in JavaScript. Erweitert Objekt Objekt die toJSONString-Methode, die dann in jedem Objekt vorhanden ist und es in einen JSON-Format-String umwandelt.
    • json-rpc.org (Englisch)
    Dateierweiterung .json
    Dateikategorie
    Beispieldatei (0,57 KiB)
    Verwandte Programme Microsoft Notepad
    Microsoft WordPad
    Notepad++
    Mozilla Firefox
    DokumentauszeichnungssprachenOffice-Dokumente

    Wer sich mit Programmierung auskennt, wird Dateien mit der Erweiterung JSON sofort erkennen. Dieses Format ist eine Abkürzung für JavaScript Object Notation und stellt im Wesentlichen einen textbasierten Datenaustausch dar, der in der Programmiersprache JavaScript verwendet wird. Dementsprechend helfen Ihnen entweder spezielle Software oder Texteditoren beim Öffnen solcher Dateien.

    Das Hauptmerkmal von Skripten im JSON-Format ist ihre Austauschbarkeit mit dem XML-Format. Beide Typen sind Textdokumente, das mit Textverarbeitungsprogrammen geöffnet werden kann. Wir beginnen jedoch mit spezialisierter Software.

    Methode 1: Altova XMLSpy

    Eine recht bekannte Entwicklungsumgebung, die auch von Webprogrammierern verwendet wird. Diese Umgebung generiert auch JSON-Dateien und ist daher in der Lage, Dokumente von Drittanbietern mit dieser Erweiterung zu öffnen.


    Diese Software hat zwei Nachteile. Die erste ist eine bezahlte Vertriebsbasis. Die Testversion ist 30 Tage lang aktiv. Um sie zu erhalten, müssen Sie jedoch einen Namen und einen Namen angeben Briefkasten. Der zweite Grund ist die allgemeine Umständlichkeit: Für jemanden, der nur eine Datei öffnen muss, mag es zu ausgefallen erscheinen.

    Methode 2: Notepad++

    Der multifunktionale Texteditor Notepad++ ist der erste in der Liste der Skripte, die zum Öffnen des JSON-Formats geeignet sind.


    Notepad++ hat viele Vorteile – es zeigt die Syntax vieler Programmiersprachen an, unterstützt Plugins und ist klein... Aufgrund einiger Funktionen arbeitet das Programm jedoch langsam, insbesondere wenn Sie ein großes Dokument darin öffnen.

    Methode 3: AkelPad

    Ein unglaublich einfacher und gleichzeitig funktionsreicher Texteditor eines russischen Entwicklers. Zu den unterstützten Formaten gehört JSON.


    Wie Notepad++ ist auch diese Notepad-Option kostenlos und unterstützt Plugins. Es funktioniert schneller, aber große und komplexe Dateien werden möglicherweise nicht beim ersten Mal geöffnet. Denken Sie also an diese Funktion.

    Methode 4: Komodo Edit

    Kostenlose Schreibsoftware Programmcode aus Komodo. Es verfügt über eine moderne Benutzeroberfläche und umfassende Unterstützung für Programmierer.


    Leider verfügt das Programm nicht über die russische Sprache. Der durchschnittliche Benutzer wird sich jedoch eher von der übermäßigen Funktionalität und den unverständlichen Oberflächenelementen abschrecken lassen – schließlich richtet sich dieser Editor in erster Linie an Programmierer.

    Methode 5: Erhabener Text

    Ein weiterer Vertreter von Code-orientiert Texteditoren. Die Benutzeroberfläche ist einfacher als die seiner Kollegen, die Funktionen sind jedoch dieselben. Eine portable Version der Anwendung ist ebenfalls verfügbar.


    Leider ist Sublime Text nicht auf Russisch verfügbar. Auch das Shareware-Verteilungsmodell kann als Nachteil bezeichnet werden: Die kostenlose Version ist in keiner Weise eingeschränkt, aber von Zeit zu Zeit erscheint eine Erinnerung an die Notwendigkeit, eine Lizenz zu erwerben.

    Methode 6: NFOPad

    Auch ein einfacher Notizblock eignet sich zum Betrachten von Dokumenten mit der JSON-Erweiterung.



    Freunden erzählen