Redshift中使用regexp_substr解析JSON字段的技术求助
解决Redshift中JSON字段解析问题
嘿,我来帮你搞定这个Redshift的JSON解析需求!其实不用纠结正则表达式,Redshift有专门的JSON处理函数,比正则更可靠,不过我也会把两种方法都告诉你。
方法一:用Redshift原生JSON函数(推荐)
因为你的字段是标准JSON结构,用原生函数能避免正则带来的各种边缘问题(比如字段顺序变化、空格差异等)。假设你的表名为your_table,JSON字段名为your_json_column,可以这样写查询:
SELECT -- 提取数组第一个元素中的周期计数 json_extract_path_text( json_array_element_text(your_json_column, 0), 'frequencyCapPeriodCount' ) AS "Frequency Cap Period Count", -- 提取周期类型 json_extract_path_text( json_array_element_text(your_json_column, 0), 'frequencyCapPeriodType' ) AS "Frequency Cap Period Type", -- 提取频次上限值 json_extract_path_text( json_array_element_text(your_json_column, 0), 'frequencyCapCount' ) AS "Frequency Cap Count" FROM your_table;
函数说明:
json_array_element_text(your_json_column, 0):从frequencyCapList数组中取出第一个元素(Redshift数组索引从0开始)json_extract_path_text(json_obj, 'key'):从JSON对象中提取指定key对应的值
方法二:用regexp_substr实现(不推荐,仅作参考)
如果你一定要用正则表达式,也可以实现,但要注意如果JSON结构有变化(比如字段顺序调整、出现多余空格),正则可能失效。查询语句如下:
SELECT regexp_substr(your_json_column, '"frequencyCapPeriodCount":(\d+)', 1, 1, 'e') AS "Frequency Cap Period Count", regexp_substr(your_json_column, '"frequencyCapPeriodType":"([^"]+)"', 1, 1, 'e') AS "Frequency Cap Period Type", regexp_substr(your_json_column, '"frequencyCapCount":(\d+)', 1, 1, 'e') AS "Frequency Cap Count" FROM your_table;
正则说明:
'e'参数表示提取正则表达式中捕获组(括号内)的内容(\d+)匹配数字类型的字段值,([^"]+)匹配引号内的字符串(排除引号本身)
内容的提问来源于stack exchange,提问作者Carter
相关产品推荐
相关产品推荐

