www.wikidata.de-de.nina.az
Die JavaScript Object Notation JSON ˈdʒeɪsen ist ein kompaktes Datenformat in einer einfach lesbaren Textform fur den Datenaustausch zwischen Anwendungen JSON ist von Programmiersprachen unabhangig Parser und Generatoren existieren in allen verbreiteten Sprachen JavaScript Object NotationDateiendung jsonMIME Type application jsonStandard s RFC 8259 1 ECMA 404 2 Website https json org JSON wurde ursprunglich 1997 von Douglas Crockford spezifiziert 3 Derzeit Stand Ende 2017 wird es durch zwei inhaltlich gleiche Standards spezifiziert RFC 8259 1 sowie ECMA 404 2 Inhaltsverzeichnis 1 Einsatzgebiete 2 Datenstruktur und Formatdefinition 2 1 Zeichencodierung und Datentypen 3 Einschrankungen 4 Beispiel 5 JSON Schema 5 1 Beispiel 6 Vergleich mit XML 7 JSONP JSON mit Padding 7 1 Funktionsweise 7 2 Sicherheitsrisiken 7 3 Alternative 8 Verwandte Techniken 8 1 JSON basierte Formate 8 2 Alternative Formate 8 3 Binare Formate 8 4 Vorganger Formate 9 Weblinks 10 EinzelnachweiseEinsatzgebiete BearbeitenJSON wird zur Ubertragung und zum Speichern strukturierter Daten eingesetzt Es dient als Datenformat bei der Datenubertragung Serialisierung Insbesondere bei Webanwendungen und mobilen Apps wird es in Verbindung mit JavaScript Ajax oder WebSockets zum Ubertragen von Daten zwischen dem Client und dem Server haufig genutzt Datenstruktur und Formatdefinition BearbeitenZeichencodierung und Datentypen Bearbeiten Die Daten konnen beliebig verschachtelt werden beispielsweise ist eine indizierte Liste englisch array von Objekten moglich welche wiederum arrays oder Objekte enthalten Als Zeichenkodierung benutzt JSON standardmassig UTF 8 Auch UTF 16 und UTF 32 sind moglich JSON kennt die folgenden Typen von Elementen Nullwert wird durch das Schlusselwort null dargestellt Boolescher Wert wird durch die Schlusselworter true und false dargestellt Dies sind keine Zeichenketten Sie werden daher wie null nicht in Anfuhrungszeichen gesetzt Zahl ist eine Folge der Ziffern 0 9 Diese Folge kann durch ein negatives Vorzeichen eingeleitet und durch einen Dezimalpunkt unterbrochen sein Die Zahl kann durch die Angabe eines Exponenten e oder E erganzt werden dem ein optionales Vorzeichen oder und eine Folge der Ziffern 0 9 folgt Zeichenkette beginnt und endet mit doppelten geraden Anfuhrungszeichen Sie kann Unicode Zeichen und durch eingeleitete Escape Sequenzen enthalten Array beginnt mit und endet mit Es enthalt eine durch Kommata geteilte indizierte Liste von Elementen gleichen oder verschiedenen Typs Leere Arrays sind zulassig Objekt beginnt mit und endet mit Es enthalt eine durch Kommata geteilte ungeordnete Liste von Eigenschaften Objekte ohne Eigenschaften leere Objekte sind zulassig Eigenschaft besteht aus einem Schlussel und einem Wert getrennt durch einen Doppelpunkt Schlussel Wert Die Schlussel sollten eindeutig sein da unterschiedliche Parser mit mehrfach vorkommenden Schlusseln unterschiedlich umgehen Wahrend ECMA 404 keine Eindeutigkeit voraussetzt fordert RFC 7159 3 dass Schlussel innerhalb eines Objekts eindeutig sind der Schlussel ist eine Zeichenkette der Wert ist ein beliebiges Element dd Nicht signifikante Leerraum Zeichen sind erlaubt also Leerzeichen Unicode U 0020 horizontale Tabs U 0009 Zeilenumbruche mittels LF und oder CR U 000D und U 000A 4 Diese Zeichen werden ausserhalb von Zeichenketten bei der Interpretation ignoriert Einschrankungen BearbeitenIm Gegensatz zu JavaScript und vielen anderen Programmiersprachen erlaubt JSON fur Zahlen nicht die in IEEE 754 definierten Sonderwerte fur Unendlich und NaN 3 Ausserdem fehlen Wertetypen fur zum Beispiel Datums und Zeitwerte regulare Ausdrucke Funktionsliterale und Fehlertypen 3 Beim Serialisieren nach JSON konnen solche nicht abbildbaren Werte entweder durch null ersetzt werden oder sie mussen auf andere Weise umgesetzt werden Bei Datums und Zeit Werten ist beispielsweise die Konvertierung in eine Zeichenkette gemass ISO 8601 ublich 5 JSON unterstutzt ebenfalls keine Kommentare die beim Einlesen der Daten ignoriert werden wurden Um diese Einschrankungen zu umgehen erlauben viele JSON Programmbibliotheken optional die Verletzung des JSON Standards womit beispielsweise Werte fur Unendlich und NaN 6 unterstutzt werden konnen oder wodurch Kommentare ignoriert werden statt zu Fehlern zu fuhren 7 Beispiel Bearbeiten Herausgeber Xema Nummer 1234 5678 9012 3456 Deckung 2e 6 Waehrung EURO Inhaber Name Mustermann Vorname Max maennlich true Hobbys Reiten Golfen Lesen Alter 42 Kinder Partner null JSON Schema BearbeitenJSON Schema gibt ein JSON basiertes Format an um die Struktur von JSON Daten fur die Validierung Dokumentation und Interaktionssteuerung zu definieren Es enthalt einen Vertrag fur die JSON Daten die fur eine bestimmte Anwendung erforderlich sind und wie diese Daten geandert werden konnen Das JSON Schema basiert auf den Konzepten des XML Schemas ist jedoch JSON basiert Wie in XSD konnen dieselben Serialisierungs und Deserialisierungsprogramme sowohl fur das Schema als auch fur die Daten verwendet werden Es ist selbstbeschreibend und in einem Internet Entwurf der Internet Engineering Task Force festgelegt Fur verschiedene Programmiersprachen stehen mehrere Validatoren mit jeweils unterschiedlichen Konformitatsstufen zur Verfugung 8 Beispiel Bearbeiten schema http json schema org draft 2019 09 schema title Politiker type object required Vorname Nachname Geburtsdatum Nationalitat properties Vorname type string Nachname type string Geburtsdatum type date Nationalitat type string Partei type object properties Name type string Hauptsitz type string Grundungsdatum type date Grundungsort type string Amt type string Das obige JSON Schema kann verwendet werden um die Gultigkeit des folgenden Datenblocks zu testen Vorname Ronald Nachname Reagan Geburtsdatum 1911 02 06 Nationalitat US amerikanisch Partei Name Republican Party Hauptsitz Washington D C Grundungsdatum 1854 03 20 Grundungsort Ripon Amt US Prasident Vergleich mit XML BearbeitenSowohl JSON als auch XML beschreiben die Struktur eines Datensatzes Der Datensatz kann weitere Datensatze enthalten dadurch sind beliebig tief verschachtelte Strukturen moglich In XML sind die einzelnen Knoten der Datenstruktur benannt wahrend die Knoten in JSON unbenannt sind In XML konnen einfache Zeichenketten sowohl als Attribut eines Elements als auch als eigenstandiges Element beschrieben sein in JSON gibt es diese Unterscheidung nicht Diese in den meisten Fallen irrelevante Flexibilitat fuhrt dazu dass sich die Struktur von XML Dokumenten haufig unnotigerweise unterscheidet Sowohl fur JSON als auch fur XML gibt es Beschreibungssprachen um weiter einzugrenzen wie gultige Dokumente aussehen im Gegensatz zu wohlgeformten Dokumenten Die Syntax von JSON ist sehr viel einfacher gestaltet und erscheint daher oft lesbarer und insbesondere leichter schreibbar In der Regel produziert JSON auch geringeren Overhead im Vergleich zu XML Sowohl JSON als auch XML 9 mussen von einem speziellen Parser eingelesen werden Traditionell ist jedes wohlgeformte JSON Dokument ein gultiger JavaScript Ausdruck das sorglose Interpretieren von JSON Dokumenten mit eval fuhrt jedoch zu Sicherheitslucken Sowohl JSON als auch XML sind nicht gut zum Reprasentieren von Binardaten geeignet da beide Datenformate als Grundelement zeichenbasiert sind und nicht bytebasiert Zum Vergleich das oben genannte Beispiel in einer XML Form lt Kreditkarte Herausgeber Xema Nummer 1234 5678 9012 3456 Deckung 2e 6 Waehrung EURO gt lt Inhaber Name Mustermann Vorname Max maennlich true Alter 42 Partner null gt lt Hobbys gt lt Hobby gt Reiten lt Hobby gt lt Hobby gt Golfen lt Hobby gt lt Hobby gt Lesen lt Hobby gt lt Hobbys gt lt Kinder gt lt Inhaber gt lt Kreditkarte gt Nach Entfernung der optionalen Leerzeichen ist das JSON Objekt 226 Byte das XML Objekt 279 Byte gross ein Zuwachs um 23 Oftmals konnen Attribute auch als Kindknoten formuliert werden das Beispiel konnte dann wie folgt aussehen lt Kreditkarte gt lt Herausgeber gt Xema lt Herausgeber gt lt Nummer gt 1234 5678 9012 3456 lt Nummer gt lt Deckung gt 2e 6 lt Deckung gt lt Waehrung gt EURO lt Waehrung gt lt Inhaber gt lt Name gt Mustermann lt Name gt lt Vorname gt Max lt Vorname gt lt maennlich gt true lt maennlich gt lt Hobbys gt lt Hobby gt Reiten lt Hobby gt lt Hobby gt Golfen lt Hobby gt lt Hobby gt Lesen lt Hobby gt lt Hobbys gt lt Alter gt 42 lt Alter gt lt Kinder gt lt Partner gt null lt Partner gt lt Inhaber gt lt Kreditkarte gt Dieses Objekt ware mit Entfernung der Leerzeichen 361 Byte gross ein Zuwachs um 60 zum JSON Objekt JSONP JSON mit Padding BearbeitenBei JSONP JSON mit Padding werden die JSON Daten uber ein lt script gt Element eingebunden und inklusive eines Funktionsaufrufs ausgegeben Dies ermoglicht die Ubertragung von JSON Daten uber Domaingrenzen ist jedoch mit Sicherheitsrisiken behaftet JSONP wurde 2005 von Bob Ippolito vorgestellt 10 und wird jetzt von vielen Web 2 0 Anwendungen wie Dojo Toolkit jQuery 11 Google Web Toolkit Applications 12 und Web Services unterstutzt Fur dieses Protokoll wurden Erweiterungen vorgeschlagen die zusatzliche Eingabeparameter ermoglichen wie z B JSONPP 13 Funktionsweise Bearbeiten Ublicherweise erfolgen Ajax Datenabfragen an Server uber das XMLHttpRequest Objekt eines Webbrowsers Aufgrund der Same Origin Policy funktioniert das nicht wenn die in einem Webbrowser angezeigte Webseite uber dieses Objekt auf einen Server zuzugreifen versucht der in einer anderen Domain als die angezeigte Webseite liegt Das Problem kann durch JSONP umgangen werden Im src Attribut eines lt script gt Elements ist es moglich beliebige URLs anzugeben Fur dieses Attribut greift die Same Origin Policy nicht Es ist also moglich eine URL in einer anderen Domain anzugeben die beispielsweise JSON Daten zuruckgibt Dieses Script hatte aber keinen Effekt Um die JSON Daten auf dem Client verarbeiten zu konnen verpackt der Server diese als Parameter in eine JavaScript Funktion die im Webbrowser bereits definiert ist Der Name dieser Funktion wird dem Server ublicherweise im Query String der URL mitgeteilt wobei das genaue Format oder der Name des Parameters nicht genormt ist Beispiel Im HTML Code einer Webseite werden die JSONP Daten wie folgt eingebunden lt script type text javascript src https example com getjson jsonp exampleCallback gt lt script gt Der Server erzeugt daraufhin einen JavaScript Codeschnipsel in dem die eigentlichen Daten an die genannte Funktion ubergeben werden exampleCallback name Jane Doe value 4711 Der Browser fuhrt diesen Funktionsaufruf daraufhin aus als ob er direkt in der HTML Seite niedergeschrieben worden ware und kann so die JSON Daten aus dem Aufruf verarbeiten Ublicherweise ist fur jeden JSONP Aufruf ein eigenes lt script gt Element erforderlich Sicherheitsrisiken Bearbeiten lt script gt Elemente ermoglichen es einem Server beliebige Inhalte nicht nur JSON Objekte an den Webbrowser zu ubermitteln Dies kann dazu fuhren dass ein bosartiger Web Service uber die zuruckgesendeten Daten private Informationen im Webbrowser ausspaht oder in seinem Sinne verandert Cross Site Scripting Da das lt script gt Element die Same Origin Policy nicht beachtet kann eine bosartige Webseite JSONP Daten anfordern und auswerten die nicht fur sie bestimmt sind Cross Site Request Forgery 14 Das Problem tritt dann auf wenn sensible Daten vor Dritten geschutzt werden sollen Alternative Bearbeiten Mit Cross Origin Resource Sharing CORS existiert ein vergleichbares Verfahren das den Zugriff uber Domaingrenzen hinweg ermoglicht ohne jedoch der abgefragten Ressource die Moglichkeit einzuraumen beliebigen JavaScript Code auszufuhren Beide Verfahren erfordern die Unterstutzung durch die entsprechende Ressource wobei CORS einfacher zu implementieren ist Gleichzeitig erlaubt CORS eine einfache Einschrankung seitens der Ressource von welchen Datenquellen englisch origins das sind URLs Domanen o a sie genutzt werden kann CORS ist gegenuber JSONP meist zu bevorzugen da CORS insgesamt einfacher und sicherer ist Verwandte Techniken BearbeitenJSON basierte Formate Bearbeiten GeoJSON dient zur Annotation von Geodaten JSON LD dient zur Einbettung von RDF Daten JSON RPC dient zum Aufruf von Methoden in entfernten Computersystemen JSON Feed dient zur Beschreibung von Web Feeds Die Hypertext Application Language 15 HAL dient zur Implementierung von HATEOAS in auf JSON basierten REST Schnittstellen JSON Hyper Schema 16 dient zur Annotation von Datentypen in JSON GBSON 17 dient zur Annotation von Nucleinsauresequenzen DNA und RNA Alternative Formate Bearbeiten YAML CSON 18 CoffeeScript Object Notation HOCON 19 Human Optimized Config Object Notation JSON5 20 und Hjson 21 sind Datenserialisierungformate deren Syntax eine Obermenge von JSON ist Sie erweitern JSON u a um Kommentare und erlauben eine fur Menschen einfacher lesbare Syntax Z B sind Anfuhrungszeichen fur Schlussel und Zeichenketten Kommas am Zeilenende und geschweifte Klammern teilweise optional Jsonnet 22 Dhall 23 und CUE 24 sind ebenfalls Obermengen von JSON und bieten Funktionen wie z B Validierung JSON streaming mit den drei Varianten Line delimited JSON LDJSON Newline delimited JSON NDJSON und JSON lines JSONL INI YAML und TOML sind Formate die speziell fur Konfigurationsdateien entworfen wurden Binare Formate Bearbeiten Binare JSON Varianten gibt es mit BSON Binary JSON 25 verwendet u a von MongoDB und mit JSONB verwendet von PostgreSQL 26 Einen ahnlichen Ansatz verfolgen Googles Protocol Buffers protobuf denen im Unterschied zu JSON bzw BSON ein Schema zugrunde liegt 27 28 Ebenfalls an JSON orientiert ist das schemalose und auf platzsparende Serialisierung und Prozessierungsgeschwindigkeit hin optimierte CBOR 29 Vorganger Formate Bearbeiten Vor der Verbreitung von JSON war XML das bekannteste Datenserialisierungformat NeXTstep verwendete bereits einige Jahre fruher spatestens seit 1994 eine ahnliche Technik um einfache Objektbaume zu laden oder zu speichern Sie heissen dort Property Lists und sind bis heute in macOS in Verwendung Diese erlauben ebenfalls die Speicherung von Werten der Typen Array Dictionary boolescher Wert Binardaten Datum Zahl und Zeichenketten 30 31 Die Tool Command Language kennt Dictionaries dict die ebenfalls beliebig geschachtelte benannte Strukturen enthalten konnen Diese sind gleichfalls strukturierte Zeichenketten Der Zusatzaufwand englisch overhead ist gegenuber JSON deutlich vermindert weil keine Doppelpunkte oder Anfuhrungsstriche benotigt werden Eine klare Trennung zwischen Objektstrukturen Eigenschaft Wert und Tabellen arrays hier als Listen bezeichnet gibt es allerdings nicht Daher ist eine Uberfuhrung von JSON Daten in ein dict immer eindeutig und leicht moglich umgekehrt jedoch nicht Weblinks Bearbeiten nbsp Commons JavaScript Object Notation Sammlung von Bildern Videos und Audiodateien json org json de html deutsche Einfuhrung auf der offiziellen JSON Seite weitere Sprachen verfugbar Speeding Up AJAX with JSON Einfuhrung in JSON bei der die Unterschiede zu XML herausgearbeitet werden englisch Parsing JSON is a Minefield Ubersicht der verschiedenen Standards und Implementierungen englisch JSON Viewer Online Plattform zum Formatieren Validieren und Austausch von JSON Daten englisch jsonp eu Erklarungen und Programmierbeispiele zu JSON with Padding JSONP Einzelnachweise Bearbeiten a b Douglas Crockford RFC 8259 The JavaScript Object Notation JSON Data Interchange Format 2017 englisch a b ECMA 404 a b c d Tim Bray RFC 7159 The JavaScript Object Notation JSON Data Interchange Format Marz 2014 englisch Douglas Crockford RFC 4627 The application json Media Type for JavaScript Object Notation JSON Juli 2006 Abschnitt 2 JSON Grammar englisch Date Time processing JSONata Abgerufen am 21 Mai 2023 englisch JsonReadFeature Jackson core 2 10 0 API Abgerufen am 21 Mai 2023 JsonReadFeature Jackson core 2 10 0 API Abgerufen am 21 Mai 2023 JSON Schema JSON Documentation 18 Januar 2020 abgerufen am 10 Oktober 2021 englisch Remote JSON JSONP In Bob pythonmac org 5 Dezember 2005 abgerufen am 23 Januar 2011 englisch from future import jQuery API Abgerufen am 23 Januar 2011 englisch GWT Tutorial How to Read Web Services Client Side with JSONP Nicht mehr online verfugbar In Google Web Toolkit Applications 6 Februar 2008 ehemals im Original abgerufen am 23 Januar 2011 englisch 1 2 Vorlage Toter Link www gwtapps com Seite nicht mehr abrufbar Suche in Webarchiven nbsp Info Der Link wurde automatisch als defekt markiert Bitte prufe den Link gemass Anleitung und entferne dann diesen Hinweis Jonas Almeida JSON JSONP JSONPP S3DB 11 Juni 2008 abgerufen am 23 Januar 2011 englisch Jeremiah Grossman Advanced Web Attack Techniques using GMail 27 Januar 2006 abgerufen am 23 Januar 2011 englisch Mike Kelly JSON Hypertext Application Language IETF Network Working Group 12 Oktober 2016 abgerufen am 7 Dezember 2016 englisch Austin Wright Geraint Luff JSON Hyper Schema A Vocabulary for Hypermedia Annotation of JSON IETF 13 August 2016 abgerufen am 7 Dezember 2016 englisch GBSON A new annotation file format based on JSON Abgerufen am 12 November 2021 englisch CSON HOCON JSON5 Hjson Jsonnet Dhall CUE bsonspec org PostgreSQL 12 Documentation 8 14 JSON Types What Are Protocol Buffers Protocol Buffers Google s data interchange format CBOR Concise Binary Object Representation Overview Abgerufen am 16 Februar 2019 Introduction to Property Lists In developer apple com Abgerufen am 6 November 2011 englisch NSString Class Cluster propertyList Methode In NeXTStep 3 3 Developer Documentation Manuals nextcomputers org 30 Juni 2000 abgerufen am 20 Juli 2022 englisch Normdaten Sachbegriff GND 1105592812 lobid OGND AKS LCCN sh2014000515 Abgerufen von https de wikipedia org w index php title JavaScript Object Notation amp oldid 237916813