Я пытаюсь проверить json
тип в PostgreSQL 9.3.
У меня есть json
столбец с именем data
в таблице reports
. JSON выглядит примерно так:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Я хотел бы запросить таблицу для всех отчетов, которые соответствуют значению 'src' в массиве 'objects'. Например, можно ли запросить в БД все соответствующие отчеты 'src' = 'foo.png'
? Я успешно написал запрос, который может соответствовать "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Но поскольку "objects"
есть массив значений, я не могу написать что-то, что работает. Можно ли запросить в БД все соответствующие отчеты 'src' = 'foo.png'
? Я просмотрел эти источники, но до сих пор не могу понять:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Как выполнить запрос с использованием полей внутри нового типа данных PostgreSQL JSON?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Я тоже пробовал такие вещи, но безрезультатно:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Я не эксперт по SQL, поэтому не знаю, что делаю не так.
jsonb
/ pg 9.4. Кроме того: для простого случая (1 уровень вложенности)->
оператор также выполняет трюк дляjson
в стр. 9.3.Создайте таблицу со столбцом типа json
Теперь вставим данные json
Теперь давайте сделаем несколько запросов для получения данных
Вы могли заметить, что в результатах есть кавычки (") и скобки ([]).
Теперь, чтобы получить только значения, просто используйте
->>
источник
выберите data -> 'objects' -> 0 -> 'src' как SRC из таблицы, где data -> 'objects' -> 0 -> 'src' = 'foo.png'
источник