Redshift中解析含反斜杠的Super类型JSON数组列问题求助
Redshift解析带反斜杠的Super类型JSON数组方案
针对Super类型列中嵌套转义JSON字符串导致的解析问题,可通过展开数组+转义字符清理+嵌套JSON解析的组合方式提取目标字段,以下是具体实现步骤:
核心思路
- 用
UNNEST展开Super类型的JSON数组,将数组元素拆分为单独行; - 对嵌套的转义JSON字符串(如
parameters.inputs_dict、result),用REPLACE去除反斜杠,再通过JSON_PARSE转换为可解析的Super类型; - 直接提取
name、status等顶层字段,按需解析嵌套字段内容。
示例SQL
假设表名为your_table,Super类型列名为json_super_col,执行以下语句可提取所有目标字段:
SELECT json_item.name AS step_name, json_item.status AS step_status, -- 解析parameters中的嵌套JSON字段 JSON_PARSE(REPLACE(json_item.parameters.inputs_dict, '\\', '')).date_of_birth AS dob, -- 处理result字段:区分JSON格式和纯字符串 CASE WHEN json_item.result LIKE '{%' THEN JSON_PARSE(REPLACE(json_item.result, '\\', '')).any_missing_input ELSE NULL END AS any_missing_input, CASE WHEN json_item.result LIKE '{%' THEN JSON_PARSE(REPLACE(json_item.result, '\\', '')).return_message ELSE json_item.result END AS result_detail, json_item.execution_time AS execution_time FROM your_table, UNNEST(json_super_col) AS t(json_item)
关键细节说明
- UNNEST函数:Redshift支持用该函数直接展开Super类型的JSON数组,无需额外转换;
- 转义处理:SQL中反斜杠需用
\\表示,REPLACE(json_str, '\\', '')可彻底清理转义符; - JSON_PARSE:将清理后的字符串转换为Super类型,即可像普通JSON一样提取子字段;
- 兼容纯字符串:通过
LIKE '{%'判断字段是否为JSON格式,避免解析纯字符串(如示例中的"53")时报错。
内容的提问来源于stack exchange,提问作者trathi01
相关产品推荐
相关产品推荐

