JSON_SET函数用于替换JSON文件指定位置的值或新增对应的值。
命令格式
JSON JSON_SET(JSON <input>, ARRAY STRING <path>, JSON <value>, BOOLEAN <create_if_missing>);
-- 标准示例。
-- 返回[{"f1":4,"f2":null},2,null,3]。
SELECT JSON_SET(JSON'[{"f1":1,"f2":null}, 2, null, 3]',
ARRAY("0", "f1"),
JSON'4',
false);参数说明
input:必填。被替换的JSON内容。支持JSON OBJECT或JSON ARRAY。
path:必填。被替换的JSON内容的位置。ARRAY<STRING>类型。ARRAY里的每一个值对应为JSON的一层嵌套定位路径值,如果JSON是n层嵌套内容,那么ARRAY数组对应为n个值。如果JSON对象没有嵌套,则第一个值为
“0”。value:必填。待替换的JSON值。
create_if_missing:必填。当指定位置的值不存在时,是否将待替换的JSON值添加到input中。BOOLEAN类型,true表示添加,false表示不添加。
返回值
修改后的JSON。
使用示例
示例1:替换JSON指定位置的值。
-- 返回 [{"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嵌套2层数组的情况。 -- 返回 [{"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);示例2:替换JSON指定位置的值。create_if_missing参数为false,当指定位置的值不存在时,不会执行替换或新增操作。
-- 返回 [{"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);示例3:替换JSON指定位置的值。create_if_missing参数为true,当指定位置的值不存在时,会将待替换的JSON内容添加到
input中。-- 返回 [{"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);示例4:如果输入参数为JSON OBJECT,需要保证路径path第一个元素为合法Key。
-- 返回 {"f1":[2,3,4]} SELECT JSON_SET(JSON'{"f1":1}', ARRAY("f1"), JSON'[2,3,4]', false); -- 返回{"f1":1} -- 由于JSON非数组,此时路径["0"]代表key为字符串"0"的字段,路径不存在不进行替换 SELECT JSON_SET(JSON'{"f1":1}', ARRAY("0"), JSON'[2,3,4]', false);说明若使用MaxCompute客户端执行,当use_instance_tunnel为true时,可能出现 odpscmd与logview的两边返回结果的屏显不一致的情况,结果请以logview里的result为准。
相关函数
JSON_SET函数属于JSON函数,更多JSON类型函数请参见JSON函数概述。
该文章对您有帮助吗?