Mysql
 sql >> Database >  >> RDS >> Mysql

JSON_VALUE() in MySQL

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 restituisce NULL; questo è il comportamento predefinito.
  • DEFAULT value A VUOTO :il value 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() restituisce NULL; questo è il comportamento predefinito.
  • DEFAULT value IN ERRORE :Questo è il valore restituito; il suo valore deve corrispondere a quello del tipo restituito.
  • ERROR 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(json_doc , path RESTITUZIONE type ) equivale a chiamare 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)) )
);