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.