In SQLite, de json_quote()
functie converteert een getal of tekenreeks naar de bijbehorende JSON-representatie.
We geven het getal of de tekenreeks als argument wanneer we de functie aanroepen, en de functie retourneert een JSON-representatie van die waarde.
Syntaxis
De syntaxis gaat als volgt:
json_quote(X)
Waar X
is een getal of tekenreeks.
Voorbeelden
Dit is wat er gebeurt als we een string doorgeven aan de functie:
SELECT json_quote('Super');
Resultaat:
"Super"
En hier is een nummer:
SELECT json_quote(10.45);
Resultaat:
10.45
Hier is een string die eruitziet als een array:
SELECT json_quote('[10.45]');
Resultaat:
"[10.45]"
Hier is een string die eruitziet als een object:
SELECT json_quote('{ "score" : 10.45 }');
Resultaat:
"{ \"score\" : 10.45 }"
Maar als we het argument doorgeven in de json()
functie krijgen we dit:
SELECT json_quote(json('{ "score" : 10.45 }'));
Resultaat:
{"score":10.45}
Null-waarden
Doorgeven van null
retourneert null
:
SELECT json_quote( null );
Resultaat:
null
Dit is eigenlijk de SQL-tekstwaarde null
. We kunnen dit verifiëren door het door te geven aan de json_type()
functie:
SELECT json_type(json_quote( null ));
Resultaat:
null
De json_type()
functie retourneert het SQL-tekstwaardetype van zijn argument. In dit geval retourneerde het null
, wat aangeeft dat de json_quote()
functie geretourneerd null
toen we null
passeerden ernaar toe.
In het geval dat we vermoeden dat onze SQLite CLI null
retourneert omdat een werkelijke null-waarde wordt geretourneerd, kunnen we het volgende doen om dat uit te sluiten:
.nullvalue N/A
Dat vertelt onze opdrachtregelinterface om N/A
. te retourneren telkens wanneer een null-waarde wordt geretourneerd.
Nadat we de bovenstaande opdracht hebben uitgevoerd, laten we de vorige instructies opnieuw uitvoeren, evenals een bewerking die daadwerkelijk resulteert in een null-waarde:
SELECT
json_quote( null ) AS json_quote,
json_type(json_quote( null )) AS json_type,
1 / 0 AS actual_null;
Resultaat:
+------------+-----------+-------------+ | json_quote | json_type | actual_null | +------------+-----------+-------------+ | null | null | N/A | +------------+-----------+-------------+
In SQLite resulteert het delen van een getal door nul in een null-waarde (veel andere DBMS'en geven in dergelijke gevallen een fout). In dit voorbeeld had ik null-waarden ingesteld om N/A
. te retourneren , en dus kunnen we zien dat er een verschil is tussen de uitvoer van de twee functies en de werkelijke nulwaarde. Dat wil zeggen, de enige null-waarde in de bovenstaande uitvoer staat in de laatste kolom.
Dat gezegd hebbende, kan een null-waarde nog steeds resulteren in de SQL-tekstwaarde null
wordt geretourneerd bij het aanroepen van json_quote()
. Misschien illustreert een voorbeeld dit beter dan ik het kan uitleggen:
SELECT
json_quote( 1 / 0 ),
json_type(json_quote( 1 / 0 )),
json_type( 1 / 0 ),
1 / 0;
Resultaat:
+---------------------+--------------------------------+--------------------+-------+ | json_quote( 1 / 0 ) | json_type(json_quote( 1 / 0 )) | json_type( 1 / 0 ) | 1 / 0 | +---------------------+--------------------------------+--------------------+-------+ | null | null | N/A | N/A | +---------------------+--------------------------------+--------------------+-------+
We kunnen zien dat de eerste twee kolommen de null
. retourneren SQL-tekstwaarde en de andere twee kolommen retourneren een werkelijke null-waarde.
Booleans doorgeven
Hier is een voorbeeld van het doorgeven van booleans zoals true
en false
:
SELECT
json_quote( true ) AS true,
json_quote( false ) AS false;
Resultaat:
+------+-------+ | true | false | +------+-------+ | 1 | 0 | +------+-------+
Ongeldig aantal argumenten
Het aanroepen van de functie zonder een argument door te geven resulteert in een fout:
SELECT json_quote();
Resultaat:
Parse error: wrong number of arguments to function json_quote() SELECT json_quote(); ^--- error here
En het doorgeven van te veel argumenten resulteert ook in een fout:
SELECT json_quote( 1, 2 );
Resultaat:
Parse error: wrong number of arguments to function json_quote() SELECT json_quote( 1, 2 ); ^--- error here