In SQLite is de json()
functie converteert onbewerkte tekst die eruitziet als JSON naar daadwerkelijke JSON.
We geven een JSON-tekenreeks door als argument wanneer we de functie aanroepen. De json()
functie controleert vervolgens of het argument een geldige JSON-tekenreeks is en retourneert een verkleinde versie van die JSON-tekenreeks. Als het argument geen goed gevormde JSON-tekenreeks is, wordt er een fout gegenereerd.
Echter, de json()
functie is niet ontworpen om te testen of een waarde een geldige JSON is. Gebruik hiervoor de json_valid()
functie in plaats daarvan.
Syntaxis
json(X)
Waar X
is de waarde die moet worden gecontroleerd en verkleind.
Voorbeeld
SELECT json('{ "a": 1 }');
Resultaat:
{"a":1}
In dit geval heb ik een geldig JSON-document verstrekt, en dus werd een verkleinde versie ervan geretourneerd (onnodige spaties werden verwijderd).
Hier is een voorbeeld dat een groter JSON-document gebruikt met meer spaties:
SELECT json('{
"_id": 1.0,
"title": "Animals",
"body": "blah blah 1",
"tags": [
"cats",
"dogs"
]
}');
Resultaat:
{"_id":1.0,"title":"Animals","body":"blah blah 1","tags":["cats","dogs"]}
De json()
functie kan handig zijn wanneer u JSON moet doorgeven aan een andere functie. Zoals gezegd converteert het onbewerkte tekst die eruitziet als JSON naar echte JSON, wat het ideaal maakt voor wanneer je het aan de andere functie moet doorgeven. De andere functie interpreteert de waarde dan als JSON in plaats van een string.
Ongeldige JSON
Het doorgeven van een ongeldige JSON-tekenreeks resulteert in een fout:
SELECT json('{oops!');
Resultaat:
Runtime error: malformed JSON
Labels dupliceren
Als een JSON-document dubbele labels bevat, is er geen garantie dat deze altijd behouden blijven.
Op het moment van schrijven zijn dubbele labels bewaard gebleven. De SQLite-documentatie geeft echter aan dat dit zou kunnen veranderen in een toekomstige versie van SQLite, zodat dubbele labels stilletjes worden verwijderd.
Hier is een voorbeeld dat een JSON-document met dubbele labels gebruikt:
SELECT json('{ "a": 1, "b": 1, "a" : 2 }');
Resultaat:
{"a":1,"b":1,"a":2}
In dit geval heeft mijn JSON-document twee labels genaamd a
. Beide zijn bewaard gebleven in mijn SQLite-installatie (versie 3.38.0), maar dit zal in toekomstige SQLite-versies niet altijd het geval zijn.