… Is Json [Array|Object|Scalar]

Auf gültiges JSON testen, zwischen Arrays, Objekten und Skalaren unterscheiden


BigQueryDb2 (LUW)DerbyH2MariaDBMySQLOracle DBPostgreSQLSQL ServerSQLite20092011201320152017201920212023⊘ 3.9.1 - 3.50.0c⊘ 3.5.7 - 3.8.11⊘ 2008R2 - 2022✓ 16 - 17⊘ 8.3 - 15⚠ 21c - 23.9a⚡ 12cR2 - 19cd⚡ 12cR1ab⊘ 11gR1 - 11gR2⊘ 5.7 - 9.3.0c⊘ 5.0 - 5.6⊘ 10.2 - 12.0.2c⊘ 5.1 - 10.1✓ 1.4.200 - 2.3.232⊘ 1.4.192 - 1.4.199⊘ 10.15.1.3 - 10.17.1.0⊘ 9.7 - 12.1.2⊘ 2.0c
  1. ⚡Erkennt skalare JSON Werte nicht als JSON
  2. Keine Typeneinschränkungen: … is json [array|object|scalar]
  3. Siehe Alternativen
  4. 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 OBJECT

Das 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.

BigQuery 2025-09-02Db2 (LUW) 12.1.2Derby 10.17.1.0H2 2.3.232MariaDB 12.0.2MySQL 9.3.0Oracle DB 23.9aabcbPostgreSQL 17SQL Server 2022SQLite 3.50.0… is json       … is json value … is json array … is json object… is json scalar
  1. Akzeptiert Objekt-Schlüssel ohne Anführungszeichen: {a: 1}
  2. Not for character strings
  3. 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.

BigQuery 2025-09-02Db2 (LUW) 12.1.2Derby 10.17.1.0H2 2.3.232MariaDB 12.0.2MySQL 9.3.0Oracle DB 23.9PostgreSQL 17SQL Server 2022SQLite 3.50.0is json [without unique [keys]]is json  with    unique [keys] 

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.

BigQuery 2025-09-02Db2 (LUW) 12.1.2Derby 10.17.1.0H2 2.3.232bMariaDB 12.0.2MySQL 9.3.0Oracle DB 23.9aPostgreSQL 17SQL Server 2022SQLite 3.50.0… is json… format json is json
  1. Akzeptiert Objekt-Schlüssel ohne Anführungszeichen: {a: 1}
  2. 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

BigQuery 2025-09-02Db2 (LUW) 12.1.2Derby 10.17.1.0H2 2.3.232MariaDB 12.0.2MySQL 9.3.0Oracle DB 23.9PostgreSQL 17SQL Server 2022SQLite 3.50.0isjson(…, <type constraint>) = 1json_valid(…) = 1safe.parse_json(…) is not null
Optionale Features
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.

20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS, um sukzessive aufzuholen und modern-sql.com am Radar zu behalten.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Fußnoten

  1. ISO/IEC 9075-2:2023 §4.48 (NOTE 111)

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2015-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO