No MariaDB,
JSON_ARRAY_INSERT()
é uma função interna que insere um valor em um documento JSON e retorna o resultado. Sintaxe
A sintaxe fica assim:
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Onde
json_doc
é o documento JSON, path
é o caminho para onde você deseja inserir o(s) valor(es) e value
é o valor a inserir. Exemplo
Aqui está um exemplo para demonstrar.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3);
Resultado:
+-------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) |+--------------------------- ----------------+| [0, 3, 1, 2] |+----------------------------------------------------- ----+
Nesse caso, o valor
3
foi inserido no array na posição 1
. Arrays são baseados em zero, então ele se torna o segundo elemento no array. Inserir vários valores
Você pode inserir vários valores em uma única chamada para
JSON_ARRAY_INSERT()
. Exemplo:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5);
Resultado:
+---------------------------------------------- --------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5) |+------------------- ------------------------------------+| [4, 0, 5, 1, 2] |+------------------------------------------------ ------------------+
A avaliação é realizada da esquerda para a direita.
Veja o que acontece se mudarmos o
path
/value
argumentos em torno de:SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4);
Resultado:
+---------------------------------------------- --------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4) |+------------------- ------------------------------------+| [4, 0, 1, 5, 2] |+------------------------------------------------ ------------------+
Várias matrizes
Você pode inserir valores em mais de um array dentro da mesma chamada para
JSON_ARRAY_INSERT()
. Exemplo:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5);
Resultado:
+---------------------------------------------- ----------+| JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5) |+--------------------- -----------------------------------+| {"a":[0, 4, 1], "b":[2, 3, 5]} |+----------------------- ----------------------------------+
Matrizes aninhadas
Aqui está um exemplo de inserção de um valor em uma matriz aninhada:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4);
Resultado:
+--------------------------------------------+| JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4) |+------------------------------- -------------+| [0, 1, [2, 4, 3]] |+------------------------------------------------- ---------+
Documento JSON maior
Aqui está um exemplo com um documento JSON um pouco maior.
Eu também uso
JSON_DETAILED()
para embelezar o resultado:SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
);
Resultado:
{ "pet":{ "name":"Fofo", "dieta":[ "Peixe", "Frango", "Água" ] }}
Argumentos nulos
Se o primeiro argumento for
NULL
, o resultado é NULL
:SELECT JSON_ARRAY_INSERT(null, '$[1]', 4);
Resultado:
+------------------------------------+| JSON_ARRAY_INSERT(null, '$[1]', 4) |+---------------------------------- -+| NULL |+------------------------------------+
O mesmo se aplica ao
path
argumento:SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4);
Resultado:
+--------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) |+------------------------------ --------------+| NULL |+--------------------------------------------+
No entanto, se ovalue
argumento éNULL
, entãoNULL
é inserido no array:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null);
Resultado:
+---------------------------------------------- +| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null) |+--------------------------- -------------------+| [0, nulo, 1, 2] |+-------------------------------------- -------+
Você também pode usarJSON_ARRAY_APPEND()
para anexar valores a uma matriz.