In MySQL, il JSON_EXTRACT()
la funzione restituisce i dati da un documento JSON. I dati effettivi restituiti sono determinati dal percorso fornito come argomento.
Fornisci il documento JSON come primo argomento, seguito dal percorso dei dati da restituire. Puoi anche fornire più percorsi per restituire i dati da più punti del documento.
Sintassi
La sintassi è questa:
JSON_EXTRACT(json_doc, path[, path] ...)
Dove json_doc
è il documento JSON e il path
è il percorso del valore da restituire.
Se è possibile che quegli argomenti possano restituire più valori, i valori corrispondenti vengono inseriti automaticamente come una matrice, nell'ordine corrispondente ai percorsi che li hanno prodotti.
Esempio 1 – Utilizzo di base
Ecco un esempio da dimostrare.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Risultato:
+--------+ | Result | +--------+ | 2 | +--------+
In questo caso, abbiamo restituito il valore della chiave b
.
Ecco un altro esempio:
SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';
Risultato:
+--------+ | Result | +--------+ | "Bart" | +--------+
Esempio 2 – Percorso inesistente
Se specifichi un percorso che non esiste, viene restituito un valore NULL.
SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Risultato:
+--------+ | Result | +--------+ | NULL | +--------+
Otterrai anche un valore NULL se uno qualsiasi degli argomenti è NULL
.
Esempio 3 – Matrici
Ecco un esempio che utilizza un array.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';
Risultato:
+--------+ | Result | +--------+ | 3 | +--------+
Le matrici utilizzano la numerazione in base zero, quindi in questo caso il terzo elemento viene sostituito.
Ecco un altro esempio di array. Questa volta restituiamo un valore da un array nidificato.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Risultato:
+--------+ | Result | +--------+ | 4 | +--------+
Esempio 4 – Percorsi multipli
Puoi specificare più di un percorso per restituire i dati da più posizioni all'interno del documento JSON.
Esempio di base:
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Risultato:
+--------+ | Result | +--------+ | [2, 4] | +--------+
Esempio 5:un documento JSON più grande
Ecco un esempio con un documento JSON leggermente più grande.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies') AS 'Result';
Risultato:
+---------------------------------------+ | Result | +---------------------------------------+ | ["Homer", 39, ["Eating", "Sleeping"]] | +---------------------------------------+
Possiamo anche scegliere un elemento specifico dall'array, se necessario:
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies[1]') AS 'Result';
Risultato:
+---------------------------+ | Result | +---------------------------+ | ["Homer", 39, "Sleeping"] | +---------------------------+