[{asd:123,zxc:342,asdg:111},{asd:123,zxc:342,asdg:111},{asd:123,zxc:342,asdg:111}]json_extract(json_extract(aaa,'$[]'),'$[].asd') 不能这样子吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云MaxCompute SQL中,如果您想要从JSON数组中提取特定的值,确实可以使用json_extract
函数,但是您的表达方式需要调整,因为MaxCompute SQL不直接支持您给出的这种嵌套的JSON路径语法。
假设您有一个表,其中一列名为aaa
,存储了您提供的JSON数组。要从每个对象中提取asd
的值,您可以使用lateral view explode
来展开数组,然后对每个元素应用json_extract
。下面是一个示例:
CREATE TABLE test_table (aaa string);
INSERT INTO test_table VALUES ('[{\"asd\":123,\"zxc\":342,\"asdg\":111},{\"asd\":123,\"zxc\":342,\"asdg\":111},{\"asd\":123,\"zxc\":342,\"asdg\":111}]');
SELECT json_extract(value, '$.asd') as asd_value
FROM test_table
CROSS JOIN UNNEST(json_tuple(aaa, 'array')) AS t(array)
CROSS JOIN UNNEST(array) AS value;
这里,我们首先使用json_tuple
将整个JSON数组作为单个元素提取出来,然后通过UNNEST
操作将其展开为多行,最后用json_extract
提取asd
字段的值。
请注意,具体的SQL语法可能根据实际使用的数据库或数据处理引擎(如MaxCompute、Hive等)有所不同,因此上述示例需要根据您实际使用的环境进行适当调整。