如何在ClickHouse中提取JSON数组list的首个元素?
在ClickHouse中提取JSON数组的第一个元素
你的foo列存储的是外层为数组、内部包含单个对象的JSON数据,要提取每个对象里list数组的第一个元素,有两种简洁的实现方式:
方法一:结合数组操作与JSON提取函数
通过逐层拆解JSON结构来获取目标值:
SELECT -- 先取出外层JSON数组的第一个对象 arrayElement(foo, 1) AS target_obj, -- 从对象中提取list数组,再取第一个元素 arrayElement(JSONExtract(target_obj, 'Array(String)', 'list'), 1) AS first_list_item FROM your_table;
也可以直接嵌套写法,简化语句:
SELECT arrayElement(JSONExtract(arrayElement(foo, 1), 'Array(String)', 'list'), 1) AS first_list_item FROM your_table;
方法二:使用JSONPath语法(推荐)
利用JSON_VALUE函数的JSONPath表达式,一步定位到目标元素,代码更简洁:
SELECT JSON_VALUE(foo, '$[0].list[0]') AS first_list_item FROM your_table;
注意事项
如果你的foo列是字符串类型(不是ClickHouse的JSON类型),可以先通过parseJSON函数解析成JSON再操作:
SELECT JSON_VALUE(parseJSON(foo), '$[0].list[0]') AS first_list_item FROM your_table;
内容的提问来源于stack exchange,提问作者Kay Jey
相关产品推荐
相关产品推荐

