You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:42:59