Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

JSON_ARRAY_APPEND() – Anexar valores a uma matriz JSON no MySQL


Ao usar documentos JSON com MySQL, você pode usar o JSON_ARRAY_APPEND() função para anexar novos valores a uma matriz.

A maneira como funciona é que você fornece o documento JSON como o primeiro argumento e, em seguida, segue com o caminho para anexar, seguido pelo valor a ser anexado.

No MySQL 5.7, esta função era chamada JSON_APPEND() mas esse nome não é mais suportado.


Sintaxe


A sintaxe fica assim:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

Onde:
  • json_doc é o documento JSON.
  • path é o caminho do elemento ao qual anexar o novo valor.
  • val é o novo valor que será anexado.

Os pares caminho-valor são avaliados da esquerda para a direita. O documento produzido pela avaliação de um par se torna o novo valor em relação ao qual o próximo par é avaliado.

Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4) AS 'Result';

Resultado:
+--------------+
| Result       |
+--------------+
| [1, 2, 3, 4] |
+--------------+

Portanto, o terceiro argumento é anexado ao array. Neste caso, eu uso $ para o caminho. Este é um sinônimo para o documento JSON, portanto, o valor é anexado à matriz de nível superior (que, neste caso, é a única matriz).

Exemplo 2 – Matriz aninhada


Aqui está um exemplo de como anexar um valor a um array que está aninhado dentro de outro array.
SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';

Resultado:
+-------------------+
| Result            |
+-------------------+
| [1, 2, [3, 4, 5]] |
+-------------------+

Então aqui, eu uso $[2] como o caminho. Isso especifica a matriz no terceiro elemento (as matrizes usam numeração baseada em zero, portanto, a contagem começa em zero).

Se ainda não havia um array naquele elemento, um novo array é criado.

Assim:
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';

Resultado:
+----------------+
| Result         |
+----------------+
| [1, 2, [3, 4]] |
+----------------+

Exemplo 3 – Um documento JSON maior


Este exemplo usa um documento JSON (um pouco) maior. Isso demonstra como o caminho muda dependendo de onde a matriz está no documento.
SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';

Resultado:
+----------------------------------------------------------------------------------+
| Result                                                                           |
+----------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} |
+----------------------------------------------------------------------------------+

E assim como no exemplo anterior, também podemos criar um novo array aninhado, se necessário:
SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';

Resultado:
+--------------------------------------------------------------------------------+
| Result                                                                         |
+--------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} |
+--------------------------------------------------------------------------------+