PostgreSQL中如何从JSONB字段的嵌套JSON字符串里查询数据
PostgreSQL中如何从JSONB字段的嵌套JSON字符串里查询数据
嘿,我来帮你搞定这个问题!你的场景有点特殊——虽然details是JSONB类型,但里面的body字段存的是JSON格式的字符串,不是原生的JSONB对象,所以直接用details.body.prop3肯定查不到数据,得先把这个字符串转换成JSONB类型才行。
给你两种实用的解决方法:
方法一:用类型转换(兼容所有支持JSONB的PostgreSQL版本)
SELECT (details->>'body')::jsonb->>'prop3' AS prop3_value FROM system_log;
我拆解一下这个语句的逻辑:
details->>'body':把details里的body值以字符串形式提取出来::jsonb:将这个字符串强制转换成JSONB类型->>'prop3':从转换后的JSONB对象里取出prop3的文本值
方法二:用jsonb_parse_text(PostgreSQL 14+推荐)
如果你用的是PostgreSQL 14或更高版本,推荐用专门的解析函数,可读性更强:
SELECT jsonb_parse_text(details->>'body')->>'prop3' AS prop3_value FROM system_log;
jsonb_parse_text就是专门用来把JSON格式的字符串解析成JSONB对象的,用法更直观。
进阶:避免转换失败报错
如果你的body字段有可能存在非合法JSON的情况,PostgreSQL 16+可以用try_cast来避免报错,返回NULL代替:
SELECT try_cast(details->>'body' AS jsonb)->>'prop3' AS prop3_value FROM system_log;
简单说就是核心步骤:先把嵌套的JSON字符串转成JSONB,再访问内部字段就行啦!
备注:内容来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

