No MariaDB,
JSON_REPLACE() é uma função interna que substitui valores existentes em um documento JSON e retorna o resultado. Sintaxe
A sintaxe fica assim:
JSON_REPLACE(json_doc, path, val[, path, val] ...) Exemplo
Aqui está um exemplo para demonstrar.
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT JSON_REPLACE(@json, '$.type', 'Dog'); Resultado:
+--------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Dog') |
+--------------------------------------+
| {"name": "Wag", "type": "Dog"} |
+--------------------------------------+ Neste caso eu substituí o valor
Cat com Dog . Elementos da matriz
Para substituir um elemento de matriz, especifique o índice do elemento:
SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';
SELECT JSON_REPLACE(@json, '$.scores[1]', 7); Resultado:
+---------------------------------------+
| JSON_REPLACE(@json, '$.scores[1]', 7) |
+---------------------------------------+
| {"name": "Wag", "scores": [8, 7, 9]} |
+---------------------------------------+ Nesse caso, o segundo elemento da matriz foi substituído pelo novo valor. Arrays são baseados em zero, então
$.scores[1] refere-se ao segundo elemento na matriz. Vários caminhos
A sintaxe permite substituir valores em vários caminhos com uma única chamada para
JSON_REPLACE() . Ao fornecer vários caminhos, eles são avaliados da esquerda para a direita. Isso significa que o resultado da avaliação anterior é usado como valor para a próxima.
Primeiro, aqui está um exemplo que substitui vários valores em um documento, com base em sua chave:
SET @json = '
{
"name" : "Flutter",
"type" : "Bird",
"weight" : 10
}
';
SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20); Resultado:
+------------------------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |
+------------------------------------------------------+
| {"name": "Flutter", "type": "Bat", "weight": 20} |
+------------------------------------------------------+ Cada valor foi substituído conforme o esperado.
No próximo exemplo, substituímos vários elementos em uma matriz:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REPLACE(
@json,
'$.scores[2]', "a",
'$.scores[4]', "b"
) AS Result; Resultado:
+------------------------------------+
| Result |
+------------------------------------+
| {"scores": [0, 1, "a", 3, "b", 5]} |
+------------------------------------+ Argumentos nulos
Se o
json_doc ou qualquer um dos path argumentos é null , o resultado é NULL . Mas se o value argumento é null , o valor será substituído por 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; Resultado:
+------+------+-------------+
| a | b | c |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+ No exemplo a seguir, um dos argumentos de caminho está faltando em cada chamada para
JSON_REPLACE() . Isso resulta em NULL sendo retornado para ambas as chamadas: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; Resultado:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Contagem de parâmetros incorreta
Chamando
JSON_REPLACE() sem um argumento resulta em um erro:SELECT JSON_REPLACE(); Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
É o mesmo quando não são passados argumentos suficientes:
SELECT JSON_REPLACE('{"a":1}'); Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Funções semelhantes
O
JSON_INSERT() função pode inserir novos dados. O
JSON_SET() função pode inserir novos dados e atualizar dados existentes. Então JSON_SET() é como JSON_INSERT() e JSON_REPLACE() em uma função.