Ich habe in SO so viele komplizierte Fragen gesehen, ob eine komplizierte Struktur als gültiger JSON angesehen wird oder nicht.
Aber was ist mit etwas am anderen Ende des Spektrums?
"12345"
Ist der oben genannte JSON gültig?
javascript
json
Christian
quelle
quelle
Antworten:
Ja, in den meisten Kontexten. Es ist eine gültige JSON-Syntax, die einen JSON-Wert darstellt.
Die Verwirrung darüber kommt von Douglas Crockfords RFC 4627 , der ursprünglich den
application/json
Internet-Medientyp im Jahr 2006 definierte.Wie Crockford 2013 in einem Beitrag erklärte ( leider mit dem Rest von Google+ gelöscht ):
Die Beispielzeichenfolge ist ein gültiger JSON-Wert, aber es wäre falsch gewesen, sie als vollständigen "JSON-Text" -Körper einer
application/json
HTTP-Antwort zu verwenden. Dies ist jedoch nicht mehr der Fall: RFC-4627 wurde 2014 mit der Veröffentlichung von RFC 7159 überholt , mit dem Sie einen beliebigen JSON-Wert verwenden können:Ein "Standard für JSON selbst" wurde 2013 ebenfalls als ECMA-404 veröffentlicht , und JSON wurde auch in Ausgabe 5.1 der ECMAScript (JavaScript) -Spezifikation ECMA-262 definiert . Diese Spezifikationen und die meisten Parser erlauben jeden JSON-Wert als vollständigen JSON-Text, selbst wenn es sich nur um eine einfache Zeichenfolge handelt.
quelle
Ab 2014 veraltet RFC 7159 die älteren JSON-RFCs und erklärt, dass jeder JSON-Wert gültiger JSON-Text und gültiger Anwendungs- / JSON-Inhalt ist - einschließlich Zeichenfolgen. Es wird jedoch auch auf das Inkompatibilitätsproblem mit älteren JSON-Implementierungen hingewiesen:
quelle
Es ist eine gültige JSON-Zeichenfolge, aber kein JSON-Objekt.
Siehe http://www.json.org/
quelle
Zum Zeitpunkt der Erstellung dieser Frage wäre dies kein gültiger JSON-Text gewesen. Es wäre eine gültige Zeichenfolge gewesen, die als Teil eines JSON-Textes erscheinen könnte.
Die ursprüngliche Spezifikation sagte:
… Was bedeutet, dass die oberste Ebene
{}
oder sein musste[]
. Man konnte nicht direkt mit einer Schnur eintauchen.Die neueste Spezifikation sagt:
Jeder Wert, einschließlich einer Zeichenfolge, kann nun ein vollständiger JSON-Text sein und
"12345"
ist jetzt gültig.quelle