Insere um valor JSON em uma posição específica de um documento JSON.
Formato do comando
JSON json_insert(JSON <input>, ARRAY STRING <path>, JSON <value>, BOOLEAN <insert_after>);
Parâmetros
input: Obrigatório. O conteúdo JSON a ser modificado. Este parâmetro aceita os tipos de dados JSON ARRAY e JSON OBJECT.
path: Obrigatório. O caminho que especifica a posição de inserção do conteúdo JSON.
value: Obrigatório. O conteúdo JSON a ser inserido.
-
insert_after: Obrigatório.
-
Se o parâmetro de entrada contiver um array e o caminho apontar para um elemento existente, este parâmetro define a posição de inserção:
true: Insere o novo valor após o elemento especificado.
false (padrão): Insere o novo valor antes do elemento especificado.
Se m >= n, o valor é adicionado ao final do array.
Se m < -n, o valor é adicionado ao início do array.
Se -n <= m < n, o parâmetro insert_after determina a posição do novo valor.
Caso o parâmetro de entrada não seja um array, o valor é inserido no final por padrão.
NotaSe o parâmetro
inputfor um array, as seguintes regras se aplicam ao inserir conteúdo JSON. Nessas regras,nrepresenta o comprimento do array ema posição de inserção especificada: -
Valor retornado
O JSON modificado.
Exemplos
-
Exemplo 1: Inserir um novo valor em uma posição específica.
select json_insert(JSON'{"f1":1,"f2":{"t1":1,"t2":2}}', array("f2","t3"), JSON'3', false );O resultado é o seguinte:
+-----+ | _c0 | +-----+ | {"f1":1,"f2":{"t1":1,"t2":2,"t3":3}} | +-----+ -
Exemplo 2: Inserir um valor antes de um elemento em um array.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', false);O retorno será o seguinte:
+-----+ | _c0 | +-----+ | {"f1":[10,0,1,2]} | +-----+ -
Exemplo 3: Inserir um valor após um elemento em um array.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', true);O resultado obtido é:
+-----+ | _c0 | +-----+ | {"f1":[0,10,1,2]} | +-----+ -
Exemplo 4: Inserir um valor em um índice além do final de um array.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","4"), JSON'4', false);A saída retornada é:
+-----+ | _c0 | +-----+ | {"f1":[0,1,2,4]} | +-----+ -
Exemplo 5: Inserir um valor em um array JSON com um índice menor que o comprimento negativo do array posiciona o valor no início do array.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","-4"), JSON'4', false);O resultado gerado é o seguinte:
+-----+ | _c0 | +-----+ | {"f1":[4,0,1,2]} | +-----+ -
Exemplo 6: É possível inserir um valor em um array em uma posição específica, desde que essa posição seja maior ou igual ao negativo do comprimento do array e menor que o seu comprimento.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","1"), JSON'10', false);O retorno da operação é:
+-----+ | _c0 | +-----+ | {"f1":[0,10,1,2]} | +-----+