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

How to check if json array already contains a certain key?

假设我的 jsonb 列中有这个 json

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

我怎么知道 "firstName" 是否已经存在?

到目前为止我已经试过了

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

您可以使用 json_array_elements 生成字段元素,以便您可以根据 'name'.

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

dbfiddle

使用 containment operator @>:

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