查询从Postgres中的Json中提取

时间:2017-03-31 04:10:11

标签: json postgresql

我的postgres数据库中有一个json对象,如下所示

{"Actor":[{"personName":"Shashi Kapoor","characterName":"Prem"},{"personName":"Sharmila Tagore","characterName":"Preeti"},{"personName":"Shatrughan Sinha","characterName":"Dr. Amar"]}

已编辑(来自编辑:离开原版,因为它是无效的json,在我的编辑中我修复了它)

{  
   "Actor":[  
      {  
         "personName":"Shashi Kapoor",
         "characterName":"Prem"
      },
      {  
         "personName":"Sharmila Tagore",
         "characterName":"Preeti"
      },
      {  
         "personName":"Shatrughan Sinha",
         "characterName":"Dr. Amar"
      }
   ]
}

列的名称为xyz,而我的对应content_id

我需要检索content_ids的{​​{1}}。

我尝试了很多查询,其中这两个查询很有可能得到但仍然没有得到。

Actor & personName =  Sharmila Tagore

SELECT content_id 
  FROM content_table 
 WHERE cast_and_crew #>> '{Actor,personName}' = '"C. R. Simha"'

1 个答案:

答案 0 :(得分:0)

您应该使用jsonb_array_elements()搜索嵌套的jsonb数组:

select content_id, value 
from content_table, 
lateral jsonb_array_elements(cast_and_crew->'Actor');

 content_id |                              value                              
------------+-----------------------------------------------------------------
          1 | {"personName": "Shashi Kapoor", "characterName": "Prem"}
          1 | {"personName": "Sharmila Tagore", "characterName": "Preeti"}
          1 | {"personName": "Shatrughan Sinha", "characterName": "Dr. Amar"}
(3 rows)    

value属于jsonb类型,因此您可以使用->>运算符:

select content_id, value 
from content_table, 
lateral jsonb_array_elements(cast_and_crew->'Actor')
where value->>'personName' = 'Sharmila Tagore';

 content_id |                            value                             
------------+--------------------------------------------------------------
          1 | {"personName": "Sharmila Tagore", "characterName": "Preeti"}
(1 row) 

注意,如果您使用json(不是jsonb),当然请使用json_array_elements()