- ⚡Erkennt skalare JSON Werte nicht als JSON
- Keine Typeneinschränkungen:
… is json[array|object|scalar] - Siehe Alternativen
- Akzeptiert Objekt-Schlüssel ohne Anführungszeichen:
{a: 1}
Is json ist ein Prädikat, ähnlich wie is null, um etwas auf gültigen JSON-Inhalt zu testen. Der Test kann auf zwischen Arrays ([1,42]), Objekten ({"a":42}) und Skalaren (strings, numbers, true, false, null) unterscheiden.
WHERE s IS JSON OBJECTDas Beispiel liefert Zeilen, bei denen die Spalte s gültiges JSON enthält, das auf der obersten Ebene ein JSON-Objekt ist.
Da is json niemals fehlschlägt, kann man damit prüfen ob ein String gültiges JSON enthält. Wenn der zu prüfende Wert jedoch der SQL-Wert null ist, liefert is json null (unknown) als Ergebnis. Das ist nicht zu verwechseln mit dem String 'null', welcher das JSON-Skalar null darstellt.
Durch die Typeneinschränkungen Array, Object und Scalar ist is json auch für Daten vom Typ JSON nützlich. Die Typenbeschränkung Value ist gleichbedeutend dem Weglassen der Typeneinschränkung – sie liefert für alle gültigen JSON Daten den Wert wahr.
- Akzeptiert Objekt-Schlüssel ohne Anführungszeichen:
{a: 1} - Nicht für Zeichenketten
Mit is json kann man nicht zwischen den konkreten skalaren Typen String, Zahl, Boolean und dem JSON-Wert Null unterscheiden (die SQL/JSON Path Item-Methode .type() kann das jedoch).
Die Negation kann mit is not json erfolgen. Dabei ist zu beachten, dass is not json object sowohl für ungültiges JSON wahr liefert als auch für gültiges JSON das auf oberster Ebene kein Objekt ist.
Formate und Dialekte
SQL verwendet das in IETF RFC 8259 definierte JSON-Format. Dieses Format erlaubt das mehrfache Vorkommen eines Schlüssels in JSON-Objekten:0
{"a": 42,
"a": 1}Daher akzeptiert auch is json solche Objekte als gültig. Für Fälle, in denen man eine strengere Validierung benötigt, sieht der SQL-Standard den Zusatz with unique [key] vor. Objekte wie im Beispiel sind damit kein gültiges JSON mehr.
Weiters unterstützt SQL den Umgang mit anderen Formaten wie BSON oder AVRO, indem man den zu testenden Ausdruck eine Format-Klausel hinten anstellt. Ohne Format-Klausel gilt Format Json und damit das im RFC 8259 beschriebene Format.
- Akzeptiert Objekt-Schlüssel ohne Anführungszeichen:
{a: 1} - Schlägt bei Nicht-JSON Input fehl
Nur das Format Json ist im SQL-Standard definiert. Weiter Namen und deren Bedeutung sind von der Implementierung definiert (IV180).
Alternativen
Weiterführende Links
- Optionale Features
T832, „SQL/JSON path language: item method“
.type()Item-Methode
- Alterantiven
- Von der Implementierung abhängig
IV180,„The data format specified by <implementation-defined JSON representation option>“
- Anleitungen
Normative Referenzen
Das <JSON predicate> is [not] json [value|array|object|scalar] ist in ISO/IEC 9075-2:2023 als Teil des optionalen Features „T821, „Basic SQL/JSON query operators““ definiert.

