In MySQL, il JSON_VALUE()
la funzione estrae un valore da un documento JSON nel percorso specificato.
La funzione è stata introdotta in MySQL 8.0.21.
Sintassi
La sintassi è questa:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
Dove:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
Esempio
Ecco un semplice esempio da dimostrare:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );
Risultato:
Dog
Array
Ecco un esempio di come ottenere un valore da un array:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );
Risultato:
36
Gli array sono a base zero, quindi 1
restituisce il secondo elemento (0
restituirebbe il primo).
Documenti incorporati
Ecco un esempio di come ottenere un valore da un oggetto incorporato:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
);
Risultato:
Dog
Tipo di reso
Ecco un esempio di specifica del tipo di restituzione:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
);
Risultato:
{"name": "Wag", "type": "Dog"}
Se non specifichi il tipo di reso, il tipo di reso è VARCHAR(512)
.
Risultati vuoti
Per impostazione predefinita, se non vengono trovati dati nel percorso specificato, NULL
viene restituito:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
);
Risultato:
NULL
Tuttavia, le seguenti opzioni possono essere utilizzate per specificare in modo esplicito cosa dovrebbe accadere quando non vengono trovati dati nel percorso specificato:
NULL ON EMPTY
:La funzione restituisceNULL
; questo è il comportamento predefinito.DEFAULT
:ilvalue
A VUOTOvalue
fornito viene restituito. Il tipo del valore deve corrispondere a quello del tipo restituito.ERROR ON EMPTY
:La funzione genera un errore.
Esempio:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
);
Risultato:
Nothing found
Errori
È possibile utilizzare quanto segue per specificare cosa succede quando si verifica un errore:
NULL ON ERROR
:JSON_VALUE()
restituisceNULL
; questo è il comportamento predefinito.DEFAULT
:Questo è il valore restituito; il suo valore deve corrispondere a quello del tipo restituito.value
IN ERROREERROR ON ERROR
:Viene generato un errore.
Se utilizzato, ON EMPTY
deve precedere qualsiasi ON ERROR
clausola. Specificandoli nell'ordine sbagliato si verifica un errore di sintassi.
Indici
Come menzionato nelle note di rilascio di MySQL 8.0.21, JSON_VALUE()
la funzione semplifica la creazione di indici su JSON
colonne. Una chiamata a JSON_VALUE(
equivale a chiamare json_doc
, path
RESTITUZIONE type
)CAST( JSON_UNQUOTE( JSON_EXTRACT(
.json_doc
, path
) ) AS type
)
Ecco l'esempio utilizzato nelle note di rilascio:
CREATE TABLE inventory(
items JSON,
INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);