首页 > 解决方案 > 在 PostgreSQL JSONB 中获取随机键中的值?

问题描述

如果您的键是“随机的”,有没有办法从 jsonb 中提取值?例子:

{"6": {"id": "6", "name": "book-name", "genre": "history", "book_id": "3"}}

这里的关键是“6”,在我的例子中是一个伪随机数。每行总是不同的,因此只需指向它就无法访问。(jsonb->'key') 我已经尝试了几乎所有我能找到的东西,但仍然没有解决这个问题。在这种情况下,有没有办法获得价值?PG 版本是 9.6。谢谢 :)

标签: sqlpostgresqljsonb

解决方案


我不清楚你想要什么作为输出,但也许你正在寻找这个:

with sample_data (js) as (
  values ('{"6": {"id": "6", "name": "book-name", "genre": "history", "book_id": "3"}}'::jsonb)
)
select x.v
from sample_data sd
  cross join lateral jsonb_each(sd.js) as x(k,v)

以上将返回:

v                                                                   
--------------------------------------------------------------------
{"id": "6", "name": "book-name", "genre": "history", "book_id": "3"}

如果您想要单个键/值,那么您可以使用

with sample_data (js) as (
  values ('{"6": {"id": "6", "name": "book-name", "genre": "history", "book_id": "3"}}'::jsonb)
)
select d.*
from sample_data sd
  cross join lateral jsonb_each(sd.js) as x(k,v)
  cross join lateral jsonb_each_text(x.v) as d(k,v);

以上将返回:

k       | v        
--------+----------
id      | 6        
name    | book-name
genre   | history  
book_id | 3        

推荐阅读