在Postgres中从Json提取的查询

在Postgres中从Json提取的查询,json,postgresql,Json,Postgresql,我的postgres db中有一个json对象,如下所示 {演员:[{人名:沙希·卡普尔,人名:普雷姆},{人名:沙米拉·泰戈尔,人名:普里蒂},{人名:沙特鲁汉·辛哈,人名:阿马尔博士]} 从编辑器编辑:保留原始版本,因为它是无效的json,在我的编辑中我修复了它 { "Actor":[ { "personName":"Shashi Kapoor", "characterName":"Prem" }, {

我的postgres db中有一个json对象,如下所示

{演员:[{人名:沙希·卡普尔,人名:普雷姆},{人名:沙米拉·泰戈尔,人名:普里蒂},{人名:沙特鲁汉·辛哈,人名:阿马尔博士]}

从编辑器编辑:保留原始版本,因为它是无效的json,在我的编辑中我修复了它

{  
   "Actor":[  
      {  
         "personName":"Shashi Kapoor",
         "characterName":"Prem"
      },
      {  
         "personName":"Sharmila Tagore",
         "characterName":"Preeti"
      },
      {  
         "personName":"Shatrughan Sinha",
         "characterName":"Dr. Amar"
      }
   ]
}
列的名称为xyz,我有一个相应的content\u id

我需要检索包含Actor&personName=Sharmila Tagore的内容

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

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

应使用在嵌套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)    
列值的类型为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_数组_元素。

您的json中实际上有一个错误,是打字错误还是真的错了?不确定我是否理解您的要求。发布一个期望的结果,并向我们展示您确实首先尝试了一些东西。如果没有,下面是关于json的格式我尝试了这两种可能的查询但是仍然没有得到..1从内容表中选择内容id,其中演员和剧组>>{Actor,personName}='C.R.Simha'2从内容表中选择演员和剧组->>'content\u id'作为内容id,演员和剧组->'Actor'>'personName'='C.R.Simha'。非常感谢
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)