在Redshift中如何处理含非法双引号的无效JSON以提取目标字段
Redshift 含非法未转义双引号JSON的解析方案
针对你遇到的JSON字符串值内部包含未转义双引号导致json_extract_path_text无法解析的问题,不需要保留错误字段内容的前提下,可以通过正则预处理JSON字符串后再解析,两种常用方案如下:
方案1:替换非法双引号后解析
用Redshift内置的REGEXP_REPLACE函数匹配字符串值内部未转义的非法双引号,替换为其他合法字符(比如单引号、下划线),修复JSON合法性后再提取目标字段。
示例代码:
SELECT json_extract_path_text( -- 将非法双引号替换为单引号 REGEXP_REPLACE(raw_json_col, '(?<!\\\<inline_LaTeX_Formula>"(?=[^:,}]+")', ''''), 'your_target_field' ) AS extracted_field FROM your_table_name; ``` * 正则逻辑说明:仅匹配「前面没有反斜杠转义」且「后面不是JSON键值分隔符(冒号、逗号、大括号闭符号)」的双引号,不会误删JSON结构本身的合法双引号。 --- ## 方案2:直接删除整个出错字段 如果已经明确知道是哪个字段存在格式问题,可以直接用正则把整个错误键值对删掉,再解析剩余合法JSON部分,完全避开错误字段的影响。 示例代码(假设出错字段为`somefield`): ```sql SELECT json_extract_path_text( -- 移除整个somefield键值对 REGEXP_REPLACE(raw_json_col, '"somefield":\\s*"[^"]*"(,)?', ''), 'your_target_field' ) AS extracted_field FROM your_table_name; ``` --- ### 补充提示 如果担心预处理逻辑覆盖不全导致查询报错,可以用`TRY()`函数包裹解析逻辑,就算JSON修复失败也只会返回null,不会中断整个查询: `TRY(json_extract_path_text(...) ) AS extracted_field` 内容的提问来源于stack exchange,提问作者shadow777
相关产品推荐
相关产品推荐

