Wird diese einfache Zeichenfolge als gültiger JSON angesehen?

70

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?

Christian
quelle
1
Sie können diese Seite nützlich finden: jsonlint.com
Martin York
1
Mögliches Duplikat von Was ist der minimal gültige JSON?
Rimas

Antworten:

84

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/jsonInternet-Medientyp im Jahr 2006 definierte.

Ein JSON-Text ist ein serialisiertes Objekt oder Array.

Wie Crockford 2013 in einem Beitrag erklärte ( leider mit dem Rest von Google+ gelöscht ):

JSON ist nur eine Grammatik, und die Grammatik enthält Zahlen und Zeichenfolgen. Die Verwendung von JSON muss notwendigerweise restriktiver sein. RFC-4627 ist eine mögliche Verwendung und sollte nie der Standard für JSON selbst sein.

Die Beispielzeichenfolge ist ein gültiger JSON-Wert, aber es wäre falsch gewesen, sie als vollständigen "JSON-Text" -Körper einer application/jsonHTTP-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 JSON-Text ist ein serialisierter Wert. Beachten Sie, dass bestimmte frühere JSON-Spezifikationen einen JSON-Text als Objekt oder Array einschränkten.

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.

Jeremy
quelle
17

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:

Beachten Sie, dass bestimmte frühere JSON-Spezifikationen einen JSON-Text als Objekt oder Array einschränkten. Implementierungen, die nur Objekte oder Arrays generieren, für die ein JSON-Text erforderlich ist, sind in dem Sinne interoperabel, dass alle Implementierungen diese als konforme JSON-Texte akzeptieren.

Robin Green
quelle
5

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:

Ein JSON-Text ist ein serialisiertes Objekt oder Array.

… Was bedeutet, dass die oberste Ebene {}oder sein musste []. Man konnte nicht direkt mit einer Schnur eintauchen.

Die neueste Spezifikation sagt:

Ein JSON-Text ist ein serialisierter Wert. Beachten Sie, dass bestimmte frühere JSON-Spezifikationen einen JSON-Text als Objekt oder Array einschränkten.

Jeder Wert, einschließlich einer Zeichenfolge, kann nun ein vollständiger JSON-Text sein und "12345"ist jetzt gültig.

QUentin
quelle