在Presto中提取字符串时如何处理不同JSON格式?
解决方案
可以通过判断JSON的类型,分别处理数组和对象格式的提取结果,最终统一拼接成目标字符串:
SELECT CASE -- 处理JSON数组格式 WHEN JSON_TYPE(JSON_EXTRACT(my_column, '$.my_column_extract')) = 'ARRAY' THEN ARRAY_JOIN(CAST(JSON_EXTRACT(my_column, '$.my_column_extract') AS ARRAY(VARCHAR)), ', ') -- 处理带数字键的JSON对象格式 WHEN JSON_TYPE(JSON_EXTRACT(my_column, '$.my_column_extract')) = 'OBJECT' THEN ARRAY_JOIN(CAST(JSON_OBJECT_VALUES(JSON_EXTRACT(my_column, '$.my_column_extract')) AS ARRAY(VARCHAR)), ', ') END AS target_string FROM your_table;
关键函数说明:
JSON_TYPE:判断提取出的JSON数据是数组(ARRAY)还是对象(OBJECT),以此实现分支处理JSON_OBJECT_VALUES:针对JSON对象,提取所有键对应的值并组成JSON数组,刚好匹配我们需要的元素集合ARRAY_JOIN:将数组元素用指定分隔符(,)拼接成目标格式的字符串
这样不管提取结果是数组还是数字键对象,都能得到你想要的逗号分隔字符串。
内容的提问来源于stack exchange,提问作者user15960627
相关产品推荐
相关产品推荐

