MariaDB
 sql >> Database >  >> RDS >> MariaDB

Spiegazione di MariaDB JSON_REPLACE()

In MariaDB, JSON_REPLACE() è una funzione incorporata che sostituisce i valori esistenti in un documento JSON e restituisce il risultato.

Sintassi

La sintassi è questa:

JSON_REPLACE(json_doc, path, val[, path, val] ...)

Esempio

Ecco un esempio da dimostrare.

SET @json = '{ "name" : "Wag", "type" : "Cat" }';

SELECT JSON_REPLACE(@json, '$.type', 'Dog');

Risultato:

+--------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Dog') |
+--------------------------------------+
| {"name": "Wag", "type": "Dog"}       |
+--------------------------------------+

In questo caso ho sostituito il valore Cat con Dog .

Elementi della matrice

Per sostituire un elemento dell'array, specifica l'indice dell'elemento:

SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';

SELECT JSON_REPLACE(@json, '$.scores[1]', 7);

Risultato:

+---------------------------------------+
| JSON_REPLACE(@json, '$.scores[1]', 7) |
+---------------------------------------+
| {"name": "Wag", "scores": [8, 7, 9]}  |
+---------------------------------------+

In questo caso, il secondo elemento dell'array è stato sostituito con il nuovo valore. Gli array sono a base zero, quindi $.scores[1] fa riferimento al secondo elemento nell'array.

Percorsi multipli

La sintassi consente di sostituire i valori in più percorsi con una singola chiamata a JSON_REPLACE() .

Quando si forniscono più percorsi, vengono valutati da sinistra a destra. Ciò significa che il risultato della valutazione precedente viene utilizzato come valore per la successiva.

Innanzitutto, ecco un esempio che sostituisce più valori in un documento, in base alla loro chiave:

SET @json = '
    { 
        "name" : "Flutter", 
        "type" : "Bird",
        "weight" : 10
    }
';

SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);

Risultato:

+------------------------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |
+------------------------------------------------------+
| {"name": "Flutter", "type": "Bat", "weight": 20}     |
+------------------------------------------------------+

Ogni valore è stato sostituito come previsto.

Nel prossimo esempio sostituiamo più elementi in un array:

SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';

SELECT 
    JSON_REPLACE(
        @json, 
        '$.scores[2]', "a", 
        '$.scores[4]', "b"
    ) AS Result;

Risultato:

+------------------------------------+
| Result                             |
+------------------------------------+
| {"scores": [0, 1, "a", 3, "b", 5]} |
+------------------------------------+

Argomenti nulli

Se il json_doc o uno qualsiasi dei path argomenti è null , il risultato è NULL . Ma se il value l'argomento è null , quindi il valore viene sostituito con null .

SELECT 
    JSON_REPLACE(null, '$.a', 1) AS a,
    JSON_REPLACE('{"a":1}', null, 1) AS b,
    JSON_REPLACE('{"a":1}', '$.a', null) AS c;

Risultato:

+------+------+-------------+
| a    | b    | c           |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+

Nell'esempio seguente, uno degli argomenti del percorso manca da ogni chiamata a JSON_REPLACE() . Ciò risulta in NULL restituiti per entrambe le chiamate:

SET @json = '{ "name" : "Wag", "type" : "Cat" }';

SELECT 
    JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b;

Risultato:

+------+------+
| a    | b    |
+------+------+
| NULL | NULL |
+------+------+

Conteggio parametri errato

Chiamando JSON_REPLACE() senza un argomento genera un errore:

SELECT JSON_REPLACE();

Risultato:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'

È lo stesso quando non vengono passati argomenti sufficienti:

SELECT JSON_REPLACE('{"a":1}');

Risultato:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'

Funzioni simili

Il JSON_INSERT() la funzione può inserire nuovi dati.

Il JSON_SET() la funzione può inserire nuovi dati e aggiornare i dati esistenti. Quindi JSON_SET() è come JSON_INSERT() e JSON_REPLACE() in una funzione.