Redshift中json_extract_array_element_text不解义转义字符?是否有意及如何移除?
关于Redshift中json_extract_array_element_text的转义问题
在Redshift中执行以下查询时,原本期望json_extract_array_element_text能移除值中的反斜杠:
select j, json_extract_array_element_text(j, 0) as a from (select '["\"b\""]' as j);
但实际提取的字符串并未移除反斜杠,结果如下:
["\"b\""] \"b\"
提问:这是有意设计的吗?若是,移除反斜杠的惯用方法是什么?
问题解答
是否为有意设计?
是,Redshift的json_extract_array_element_text等JSON提取函数的设计逻辑是保留原始JSON字符串中的转义字符。这些反斜杠是JSON语法中用于转义双引号的必要符号,函数仅负责提取JSON元素的字符串值,不会自动处理转义还原。移除反斜杠的惯用方法
方法1:全局替换反斜杠(replace())
适用于确定所有反斜杠都需要移除的场景:
select j, replace(json_extract_array_element_text(j, 0), '\', '') as cleaned_a from (select '["\"b\""]' as j);
执行后cleaned_a的结果为"b"。
方法2:精准替换转义双引号(regexp_replace())
如果只需要移除转义双引号的反斜杠(避免误删其他场景的反斜杠),可以用正则表达式精准匹配:
select j, regexp_replace(json_extract_array_element_text(j, 0), '\\"', '"') as cleaned_a from (select '["\"b\""]' as j);
这个写法会将\"替换为",结果同样为"b",兼容性更强。
内容的提问来源于stack exchange,提问作者Ben Summers
相关产品推荐
相关产品推荐

