如何在PostgreSQL中从jsonb获取特定对象?
我有一个名为“Test”的表,其中包含两个字段“qnId”和“Answers”。 “qnId”存储uuid,“Answers”是一个jsonb数组,大致如下所示:如何在PostgreSQL中从jsonb获取特定对象?,sql,json,postgresql,postgresql-9.5,Sql,Json,Postgresql,Postgresql 9.5,我有一个名为“Test”的表,其中包含两个字段“qnId”和“Answers”。 “qnId”存储uuid,“Answers”是一个jsonb数组,大致如下所示: [{ "user" : "1", "ans" : "some text" }, { "user" : "3", "ans": "some text"}] select x ->> 'ans' as user_3_ans from jsonb_array_elements('[{ "user" : "1",
[{ "user" : "1", "ans" : "some text" }, { "user" : "3", "ans": "some text"}]
select
x ->> 'ans' as user_3_ans
from
jsonb_array_elements('[{ "user" : "1", "ans" : "some text 1" }, { "user" : "3", "ans": "some text 3"}]'::jsonb) as x
where
x ->> 'user' = '3'
如何使用值3
检索“用户”
的“ans”
的值。
如何使用普通SQL查询检索值尝试以下操作:
[{ "user" : "1", "ans" : "some text" }, { "user" : "3", "ans": "some text"}]
select
x ->> 'ans' as user_3_ans
from
jsonb_array_elements('[{ "user" : "1", "ans" : "some text 1" }, { "user" : "3", "ans": "some text 3"}]'::jsonb) as x
where
x ->> 'user' = '3'
相同,但来自表:
with
table1 as (
select
1 as id,
'[{ "user" : "1", "ans" : "some text 1" }, { "user" : "3", "ans": "some text 3"}]'::jsonb as answers
)
select
id,
answers,
el ->> 'ans' as user_3_ans
from
( select
id,
answers,
jsonb_array_elements(answers) as el
from
table1) as x
where
el ->> 'user' = '3'
您可以使用jsonb\u array\u elements()
将数组元素展开为每一行。之后,您可以使用->
操作符()过滤正确的元素:
感谢Y K的回答,但在这里,您明确地将JSON数据提供给JSON_array_elements()。但是我如何从数据库中获取这些JSON数据并传递给它呢function@Manu你确定answers列的值的语法是以双大括号开始的
{
和以}
结束的吗?是的,语法就像{{json},{json}}-Barbaros OzhanI还有一个疑问,我的answers列的数据类型应该是什么,jsonb或jsonb[],我感到困惑。我需要向该列添加多个JSON对象。在上面的回答中,yk已经使用jsonb作为类型并添加了多个JSON对象,那么jsonb和jsonb[]之间的区别是什么呢。它可以包含所有有效的JSON字符串,无论它是简单的JSON对象({“a:b”}
)还是JSON数组([“a”,“b”]
)。更具体地说:你可以考虑简单地保存一个文本,它可以以某种方式进行解释。jsonb[]类型将这些文本中的许多聚集到Postgres数组中。此数组与JSON无关,无法解析为JSON。事实上,此数组不是有效的JSON:您只需在JSON对象中列出JSON对象。但列出对象只能在JSON数组中完成。否则,您将需要一个键/值构造函数来编辑JSON格式,我认为它现在是有效的-S-Man