如何在PostgreSQL中从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",

我有一个名为“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", "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