2013-11-28 3 views
17

Я пишу функцию для нового postgreSQL db, и я пытаюсь перекрыть вложенную структуру.How-to loop over JSON Arrays в postgresql 9.3

Возможно ли это с помощью новых функций JSON? Что я пытаюсь сделать здесь ниже:

DO 
$BODY$ 
DECLARE 
    omgjson json := '[{ "type": false }, { "type": "photo" }, {"type": "comment" }]'; 
    i record; 
BEGIN 
    FOR i IN SELECT * FROM json_array_elements(omgjson) 
    LOOP 
    RAISE NOTICE 'output from space %', i; 
    END LOOP; 
END; 
$BODY$ language plpgsql 

Это возвращает набор записей (! Текст), то есть не JSON! поэтому я не могу запросить его как i->>'type', но это именно то, что я хочу сделать ...

ответ

36

Я был немного тупой, но в документации по этому JSon функции на веб-сайте PostGreSQL фактически минимальный

решить проблему все, что я сделал, было

DO 
$BODY$ 
DECLARE 
    omgjson json := '[{ "type": false }, { "type": "photo" }, {"type": "comment" }]'; 
    i json; 
BEGIN 
    FOR i IN SELECT * FROM json_array_elements(omgjson) 
    LOOP 
    RAISE NOTICE 'output from space %', i->>'type'; 
    END LOOP; 
END; 
$BODY$ language plpgsql 
+0

В более поздней версии postgresql вы можете использовать jsonb_array_elements –

Смежные вопросы