In SQLite, il json()
la funzione converte il testo non elaborato che assomiglia a JSON in JSON effettivo.
Passiamo una stringa JSON come argomento quando chiamiamo la funzione. Il json()
La funzione verifica quindi che l'argomento sia una stringa JSON valida e restituisce una versione ridotta di tale stringa JSON. Se l'argomento non è una stringa JSON ben formata, viene generato un errore.
Tuttavia, il json()
La funzione non è stata progettata per verificare se un valore è JSON valido o meno. Per farlo, usa json_valid()
funzione invece.
Sintassi
json(X)
Dove X
è il valore da controllare e minimizzare.
Esempio
SELECT json('{ "a": 1 }');
Risultato:
{"a":1}
In questo caso, ho fornito un documento JSON valido e quindi ne è stata restituita una versione ridotta (gli spazi non necessari sono stati rimossi).
Ecco un esempio che utilizza un documento JSON più grande con più spazi:
SELECT json('{
"_id": 1.0,
"title": "Animals",
"body": "blah blah 1",
"tags": [
"cats",
"dogs"
]
}');
Risultato:
{"_id":1.0,"title":"Animals","body":"blah blah 1","tags":["cats","dogs"]}
Il json()
La funzione può essere utile quando è necessario passare JSON a un'altra funzione. Come accennato, converte il testo non elaborato che assomiglia a JSON in JSON reale, il che lo rende ideale per quando è necessario passarlo all'altra funzione. L'altra funzione interpreterà quindi il valore come JSON anziché come una stringa.
JSON non valido
Il passaggio di una stringa JSON non valida genera un errore:
SELECT json('{oops!');
Risultato:
Runtime error: malformed JSON
Etichette duplicate
Se un documento JSON contiene etichette duplicate, non vi è alcuna garanzia che verranno sempre conservate.
Al momento della scrittura, le etichette duplicate vengono conservate. Tuttavia, la documentazione di SQLite consiglia che ciò potrebbe cambiare in una versione futura di SQLite, in modo che le etichette duplicate vengano rimosse silenziosamente.
Ecco un esempio che utilizza un documento JSON con etichette duplicate:
SELECT json('{ "a": 1, "b": 1, "a" : 2 }');
Risultato:
{"a":1,"b":1,"a":2}
In questo caso, il mio documento JSON ha due etichette denominate a
. Entrambi sono stati conservati nella mia installazione di SQLite (versione 3.38.0), ma potrebbe non essere sempre così nelle future versioni di SQLite.