MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB JSON_ARRAY_INSERT() explicado


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.