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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 06:59:31