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>);
Descrição dos parâmetros
input: obrigatório. Conteúdo JSON a modificar. Este parâmetro aceita os tipos JSON ARRAY e JSON OBJECT.
path: obrigatório. Posição onde inserir o conteúdo JSON.
value: obrigatório. Conteúdo JSON a inserir.
-
insert_after: obrigatório.
-
Se o parâmetro input contiver um array e o valor especificado em path já existir, a posição de adição do valor seguirá estas regras:
true: insere o novo valor após a posição especificada.
false (valor padrão): insere o novo valor antes da posição especificada.
Se m>=n, adiciona o valor value ao final do array.
Se m<-n, adiciona o valor value no início do array.
Se -n<=m<n, a posição de adição do valor value depende do valor de insert_after.
Caso o parâmetro input não contenha um array, insere o valor no final por padrão.
NotaQuando o parâmetro input contém um array, as regras de inserção de conteúdo JSON seguem a lógica abaixo. Considere n como o comprimento do array em input e m como a posição de inserção especificada:
-
Valor de retorno
Retorna o JSON modificado.
Exemplos de uso
-
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 );Resultado:
+-----+ | _c0 | +-----+ | {"f1":1,"f2":{"t1":1,"t2":2,"t3":3}} | +-----+ -
Exemplo 2: inserir dados antes de um valor específico em um array.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', false);Resultado:
+-----+ | _c0 | +-----+ | {"f1":[10,0,1,2]} | +-----+ -
Exemplo 3: inserir dados após um valor específico em um array.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', true);Resultado:
+-----+ | _c0 | +-----+ | {"f1":[0,10,1,2]} | +-----+ -
Exemplo 4: inserir um valor em um array quando a posição de inserção excede o comprimento do array. O valor é adicionado ao final.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","4"), JSON'4', false);Resultado:
+-----+ | _c0 | +-----+ | {"f1":[0,1,2,4]} | +-----+ -
Exemplo 5: inserir um valor em um array quando a posição de inserção é menor que o negativo do comprimento do array. O valor é adicionado no início.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","-4"), JSON'4', false);Resultado:
+-----+ | _c0 | +-----+ | {"f1":[4,0,1,2]} | +-----+ -
Exemplo 6: inserir um valor em um array quando a posição está entre o negativo do comprimento e o próprio comprimento (exclusive). A inserção ocorre na posição especificada.
select json_insert(JSON'{"f1":[0,1,2]}', array("f1","1"), JSON'10', false);Resultado:
+-----+ | _c0 | +-----+ | {"f1":[0,10,1,2]} | +-----+