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

JSON_ARRAY_INSERT() – Inserir valores em uma matriz JSON no MySQL


No MySQL, o JSON_ARRAY_INSERT() A função é usada para inserir um novo valor em uma matriz.

Você fornece o documento JSON como o primeiro argumento, seguido pelo caminho a ser inserido, seguido pelo valor a ser inserido.


Sintaxe


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

Onde:
  • json_doc é o documento JSON.
  • path é o caminho do elemento no qual inserir o novo valor.
  • val é o novo valor que será inserido.

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_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';

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

Portanto, o terceiro argumento é inserido na matriz no caminho especificado. Neste caso, eu uso $[1] para o caminho, que se refere ao segundo elemento (matrizes JSON usam numeração baseada em zero – a numeração começa em 0 ).

Exemplo 2 – Matriz aninhada


Aqui está um exemplo de inserção de um valor em um array que está aninhado dentro de outro array.
SELECT JSON_ARRAY_INSERT('[1, 2, [3, 4]]', '$[2][1]', 5) AS 'Result';

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

Então aqui, eu uso $[2][1] como o caminho. O [2] refere-se ao terceiro elemento da matriz externa. O [1] refere-se ao segundo elemento da matriz aninhada.

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_INSERT(@data, '$.Person.Hobbies[1]', "Base Jumping") AS 'Result';

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