Как разбирать json с помощью json_populate_recordset в postgres

У меня есть json, который хранится как текст в одной из строк моей базы данных. данные json следующие:

[{"id":67272,"name":"EE_Quick_Changes_J_UTP.xlsx"},{"id":67273,"name":"16167.txt"},{"id":67274,"name":"EE_12_09_2013_Bcum_Searchall.png"}]

чтобы разобрать это, я хочу использовать метод postgresql

json_populate_recordset()

когда я отправляю команду вроде

select json_populate_recordset(null::json,'[{"id":67272,"name":"EE_Quick_Changes_J_UTP.xlsx"},{"id":67273,"name":"16167.txt"},{"id":67274,"name":"EE_12_09_2013_Bcum_Searchall.png"}]') from anoop;

он дает мне следующую ошибку первым аргументом json_populate_recordset должен быть тип строки

note: в предложении from "anoop" указано имя таблицы.

может кто-нибудь предложить мне, как использовать метод json_populate_recordset для извлечения данных из этой строки json.

Я получил ссылку на метод из http://www.postgresql.org/docs/9.3/static/functions-json.html

Ответ 1

Первый аргумент, передаваемый в функцию pgsql json_populate_recordset должен иметь тип строки. Если вы хотите использовать массив json для заполнения существующей таблицы anoop вы можете просто передать таблицу anoop виде типа строки следующим образом:

insert into anoop
select * from json_populate_recordset(null::anoop, 
        '[{"id":67272,"name":"EE_Quick_Changes_J_UTP.xlsx"},
          {"id":67273,"name":"16167.txt"},
          {"id":67274,"name":"EE_12_09_2013_Bcum_Searchall.png"}]');

Здесь null - это значение по умолчанию для вставки в столбцы таблицы, не заданные в переданном json.

Если у вас нет существующей таблицы, вам нужно создать тип строки для хранения ваших данных json (то есть имен столбцов и их типов) и передать их в качестве первого параметра, например, этот anoop_type:

create TYPE anoop_type AS (id int, name varchar(100));
select * from json_populate_recordset(null :: anoop_type, 
        '[...]') --same as above