Как проверить, содержит ли массив json определенный ключ? - PullRequest
2 голосов
/ 22 октября 2019

Допустим, у меня есть этот json в моем столбце jsonb

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

Как я могу узнать, существует ли уже "firstName"?

Я пробовал это до сих пор

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

Ответы [ 2 ]

3 голосов
/ 22 октября 2019

Используйте оператор сдерживания @>:

select field->>'fields'
from person
where field->'fields' @> '[{"name": "firstName"}]'
1 голос
/ 22 октября 2019

вы можете использовать json_array_elements для генерации элементов полей, чтобы вы могли фильтровать на основе 'name'.

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

см. dbfiddle

...