A função JSON_SET substitui o valor em uma posição especificada no conteúdo JSON ou adiciona um valor nessa posição.
Sintaxe
JSON JSON_SET(JSON <input>, ARRAY<STRING> <path>, JSON <value>, BOOLEAN <create_if_missing>);
-- Standard example.
-- Returns [{"f1":4,"f2":null},2,null,3].
SELECT JSON_SET(JSON'[{"f1":1,"f2":null}, 2, null, 3]',
ARRAY("0", "f1"),
JSON'4',
false);
Parâmetros
input: Obrigatório. Conteúdo JSON no qual um valor será substituído. Compatível com JSON OBJECT e JSON ARRAY.
path: Obrigatório. Posição do conteúdo JSON a ser substituída. O valor é do tipo ARRAY<STRING>. Cada elemento do array especifica o caminho de um nível de aninhamento no conteúdo JSON. Se o conteúdo JSON tiver n níveis de aninhamento, o array conterá n elementos. Caso o objeto JSON não seja aninhado, o primeiro valor será
"0".value: Obrigatório. Valor JSON usado na substituição.
create_if_missing: Obrigatório. Defina se o valor JSON deve ser adicionado ao input caso não exista nenhum valor na posição especificada. O valor é do tipo BOOLEAN. true indica que o valor será adicionado; false indica que não haverá adição.
Valor de retorno
O conteúdo JSON modificado.
Exemplos
-
Exemplo 1: Substituir o valor em uma posição especificada no conteúdo JSON.
-- Returns [{"f1":[2,3,4],"f2":null},2,null,3]. SELECT JSON_SET(JSON'[{"f1":1,"f2":null},2,null,3]', ARRAY("0","f1"), JSON'[2,3,4]', false); -- JSON content with a two-level nested array. -- Returns [{"f1":1,"f2":null},2,3,[4,6]]. SELECT JSON_SET(JSON'[{"f1":1,"f2":null},2,3,[4,5]]', ARRAY("3","1"), JSON'6', false); -
Exemplo 2: Substituir o valor em uma posição especificada no conteúdo JSON com create_if_missing definido como false. Se não houver valor na posição indicada, nenhuma substituição ou adição será realizada.
-- Returns [{"f1":1,"f2":null},2,null,3]. SELECT JSON_SET(JSON'[{"f1":1,"f2":null},2,null,3]', ARRAY("0","f3"), JSON'[2,3,4]', false); -
Exemplo 3: Substituir o valor em uma posição especificada no conteúdo JSON com create_if_missing definido como true. Caso não exista valor na posição especificada, o conteúdo JSON usado na substituição será adicionado ao
input.-- Returns [{"f1":1,"f2":null,"f3":[2,3,4]},2,null,3]. SELECT JSON_SET(JSON'[{"f1":1,"f2":null},2,null,3]', ARRAY("0","f3"), JSON'[2,3,4]', true); -
Exemplo 4: Se o input for um JSON OBJECT, o primeiro elemento de path deve ser uma chave válida.
-- Returns {"f1":[2,3,4]} SELECT JSON_SET(JSON'{"f1":1}', ARRAY("f1"), JSON'[2,3,4]', false); -- Returns {"f1":1} -- The JSON content is not an array. In this case, the path ["0"] refers to the field whose key is the string "0". The path does not exist, so no replacement is performed. SELECT JSON_SET(JSON'{"f1":1}', ARRAY("0"), JSON'[2,3,4]', false);NotaAo executar o comando em um MaxCompute client com use_instance_tunnel definido como true, os resultados exibidos no odpscmd e no Logview podem apresentar inconsistências. Utilize o resultado do Logview.
Funções relacionadas
JSON_SET é uma função JSON. Para obter mais informações sobre funções JSON, consulte JSON functions.