SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite-JSON()

In SQLite der json() -Funktion konvertiert Rohtext, der wie JSON aussieht, in tatsächliches JSON.

Wir übergeben einen JSON-String als Argument, wenn wir die Funktion aufrufen. Der json() Die Funktion prüft dann, ob das Argument eine gültige JSON-Zeichenfolge ist, und gibt eine minimierte Version dieser JSON-Zeichenfolge zurück. Wenn das Argument keine wohlgeformte JSON-Zeichenfolge ist, wird ein Fehler ausgegeben.

Der json() Die Funktion wurde nicht entwickelt, um zu testen, ob ein Wert gültiges JSON ist oder nicht. Verwenden Sie dazu json_valid() stattdessen funktionieren.

Syntax

json(X)

Wobei X ist der Wert, der überprüft und minimiert werden soll.

Beispiel

SELECT json('{ "a": 1 }');

Ergebnis:

{"a":1}

In diesem Fall habe ich ein gültiges JSON-Dokument bereitgestellt, und daher wurde eine verkleinerte Version davon zurückgegeben (unnötige Leerzeichen wurden entfernt).

Hier ist ein Beispiel, das ein größeres JSON-Dokument mit mehr Leerzeichen verwendet:

SELECT json('{
	"_id": 1.0,
	"title": "Animals",
	"body": "blah blah 1",
	"tags": [
		"cats",
		"dogs"
	]
}');

Ergebnis:

{"_id":1.0,"title":"Animals","body":"blah blah 1","tags":["cats","dogs"]}

Der json() Die Funktion kann nützlich sein, wenn Sie JSON an eine andere Funktion übergeben müssen. Wie bereits erwähnt, konvertiert es Rohtext, der wie JSON aussieht, in tatsächliches JSON, was es ideal macht, wenn Sie ihn an die andere Funktion übergeben müssen. Die andere Funktion interpretiert dann den Wert als JSON und nicht als Zeichenfolge.

Ungültiges JSON

Das Übergeben einer ungültigen JSON-Zeichenfolge führt zu einem Fehler:

SELECT json('{oops!');

Ergebnis:

Runtime error: malformed JSON

Doppelte Labels

Wenn ein JSON-Dokument doppelte Labels enthält, gibt es keine Garantie dafür, dass sie immer erhalten bleiben.

Zum Zeitpunkt des Schreibens sind doppelte Etiketten erhalten. Die SQLite-Dokumentation weist jedoch darauf hin, dass sich dies in einer zukünftigen Version von SQLite ändern könnte, sodass doppelte Labels stillschweigend entfernt werden.

Hier ist ein Beispiel, das ein JSON-Dokument mit doppelten Labels verwendet:

SELECT json('{ "a": 1, "b": 1, "a" : 2 }');

Ergebnis:

{"a":1,"b":1,"a":2}

In diesem Fall hat mein JSON-Dokument zwei Bezeichnungen namens a . Beide wurden in meiner SQLite-Installation (Version 3.38.0) beibehalten, aber dies ist in zukünftigen SQLite-Versionen möglicherweise nicht immer der Fall.