2016-01-07 4 views
0

Моя таблицаExracting поля из массива JSON

create table i (a json) 

Вставка:

insert into i values ('[[1300,[{"id":5,"time":1451423706048,"zon":0,"name":"AMighty","loc":"ny"},[[3405,0,1000],[35,0,1000],[3401,0,10000],[2541,0,1000]]]]]') 

Я хочу, чтобы извлечь поле, которое приходит после того, как 2541. в этом случае ответ 0

При запросе мой Json с:

select json_array_elements(a) from I 

возвращает только одну строку.

ответ

2

Вы должны пройти через все вложенные массивы, чтобы получить необходимый элемент:

WITH i(a) AS (VALUES 
    ('[[1300,[{"id":5,"time":1451423706048,"zon":0,"name":"AMighty","loc":"ny"},[[3405,0,1000],[35,0,1000],[3401,0,10000],[2541,0,1000]]]]]'::JSON) 
) 
SELECT 
    array_element->1->1->3 as array_you_look_for, 
    array_element->1->1->3->1 as inner_array_element 
FROM i, 
    json_array_elements(a) as array_element; 

Выход:

array_you_look_for | inner_array_element 
--------------------+--------------------- 
[2541,0,1000]  | 0 
(1 row) 
+0

вы можете уточнить этот синтаксис: ОТ I, json_array_elements (а) в array_element; какое отношение создается? – koriander

+0

Что вы имеете в виду? после предложения 'FROM' вы можете указать один или более ** источников для выбора - проверьте http://www.postgresql.org/docs/9.4/static/sql-select.html @koriander –

+0

Я не знаком с параметрами postgresql, и эта страница неясна в этой точке, но запятая обычно является декартовым соединением, поэтому вторая часть должна быть отношением. Но почему json_array_elements (a) знает, что это относится к полю 'a' таблицы i. – koriander

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