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

使用CTE过滤含t记录后解析JSON仍报错的技术问题

解决JSON解析报错及过滤条件错误问题

问题原因

你当前的CTE逻辑和需求完全相反:

  • 需求是移除包含字符't'的记录,但CTE里用了where data like '%t%',反而把那些存着无效JSON的记录(比如{test12})筛选了出来,这类数据不符合JSON规范,导致PARSE_JSON解析时抛出错误。
  • 从示例数据能看到,含't'的Data值都是格式错误的JSON(比如{test12}缺少键名的双引号、没有合法键值对结构),自然无法被正常解析。

修正后的查询语句

把CTE的过滤条件改为not like '%t%',先排除掉含't'的坏数据,再执行JSON解析和扁平化操作:

with tab as (
 select * from table
 where data not like '%t%' -- 修正条件:移除含't'的记录
)
select b.value::string, a.* 
from tab a, 
lateral flatten(input => PARSE_JSON(a.data)) b;

额外提示

另外注意,你示例里剩余的Data值(比如{id: 13-43})也不是标准JSON格式(JSON要求键名必须用双引号,值如果是字符串也需要引号,13-43这种写法也不符合JSON值规范)。如果后续仍有解析问题,可能需要先将数据转换为标准JSON格式,比如用正则修正键名:

-- 简单修复键名引号的示例(可根据实际数据调整规则)
PARSE_JSON(REGEXP_REPLACE(a.data, '([a-zA-Z0-9_]+):', '"\1":'))

内容的提问来源于stack exchange,提问作者0004

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:35:22