如何修正正则表达式以正确拆分config_json字段为键值两列
解决方案
优先方案:使用原生JSON解析函数
绝大多数主流SQL引擎(PostgreSQL、BigQuery、Hive、Spark SQL等)都内置了JSON结构解析函数,稳定性远高于正则拆分,示例(PostgreSQL写法):
SELECT t.customer_id, j.key AS name, j.value AS value FROM 你的表名 t, json_each_text(t.config_json::json) j;
Hive/Spark SQL可搭配explode+json_tuple实现相同效果,自动适配所有JSON值类型(布尔、空值、数字、字符串),不会出现残留问题。
强制使用正则的修正方案
如果确实只能用正则实现,你原代码的核心问题是没有区分键、值的提取逻辑,仅删除了固定的布尔/空值,未覆盖数字、字符串,修正后拆分逻辑如下:
- 先按逗号分割得到单个键值对,和你原逻辑一致
- 单独提取键:匹配双引号包裹、后面紧跟冒号的内容
REGEXP_EXTRACT(split_part(mp.config_json, ', ', s.id), '"([^"]+)"\\s*:', 1) AS name - 单独提取值:匹配冒号后面、逗号/大括号前面的内容
TRIM(REGEXP_EXTRACT(split_part(mp.config_json, ', ', s.id), ':\\s*([^,}]+)', 1), '" ') AS value
原代码问题说明
你原有代码直接将键和值里的{ } " :以及布尔、空值统一替换为空,没有区分键、值的边界,遇到数字、字符串类型的取值时,值内容没有被匹配删除,就会和键拼接在一起出现残留。
内容的提问来源于stack exchange,提问作者Luc
相关产品推荐
相关产品推荐

