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 o value argumento é NULL , então NULL é 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 usar JSON_ARRAY_APPEND() para anexar valores a uma matriz.