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

基于通配符键查询嵌套JSON:PostgreSQL jsonb单查所有foo值

一步提取PostgreSQL jsonb中所有foo值的查询方案

嘿,这个需求完全不用靠Python循环来实现,PostgreSQL的JSON函数就能帮你一步搞定!

假设你的表名叫your_table,存储JSON数据的jsonb列叫json_data,每个JSON的结构是用timestamp作为键,每个键对应的值里包含foo字段。那你可以用下面的查询直接提取所有foo值:

基础查询(带timestamp键)

SELECT 
  j.key AS timestamp_key,  -- 保留原JSON中的timestamp键
  j.value->>'foo' AS foo_value
FROM 
  your_table,
  jsonb_each(your_table.json_data) j;

原理说明:

  • jsonb_each(json_data)是PostgreSQL的内置函数,它会把每行的JSON对象拆分成多行记录,每行对应一个「键(timestamp)- 值(对应的子JSON)」对
  • 这里用逗号分隔your_table和jsonb_each,其实是PostgreSQL对LATERAL JOIN的简写,能让原表的每一行都和它自己的JSON键值对展开结果做关联
  • j.value->>'foo'用来从每个子JSON里提取foo字段的文本值;如果需要保留JSON类型(比如foo是数字或布尔值),可以换成j.value->'foo'

简化版(只取foo值)

如果不需要保留timestamp键,只需要所有foo的值,可以简化成:

SELECT 
  j.value->>'foo' AS foo_value
FROM 
  your_table,
  jsonb_each(your_table.json_data) j
WHERE 
  j.value ? 'foo'; -- 可选过滤:只保留包含foo字段的记录,避免出现NULL

这样一个查询就能替代你之前先获取所有键、再循环查询的流程,效率高多啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:09:19