如何检查json数组是否已经包含某个键?

时间:2019-10-22 03:20:42

标签: sql json postgresql jsonb

假设我的jsonb列中有这个json

{
  "fields": [
    {
      "name": "firstName",
    },
    {
      "name": "lastName",
    },
    ...
}

我怎么知道“名字”是否已经存在?

到目前为止,我已经尝试过了

SELECT field->>'fields' 
from person where (field->'name')::jsonb ? 'firstName';

2 个答案:

答案 0 :(得分:3)

使用containment operator @>

select field->>'fields'
from person
where field->'fields' @> '[{"name": "firstName"}]'

答案 1 :(得分:1)

您可以使用json_array_elements生成字段元素,以便您可以基于'name'进行过滤。

SELECT field->>'fields', obj.*
from person, jsonb_array_elements_text(field->'fields') obj
where obj = '{"name": "firstName"}'

请参阅dbfiddle