Wird diese einfache Zeichenfolge als gültiger JSON angesehen?


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.


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.



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.

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.