I have searched quite much on this and still unanswerable. I\'m using PostgreSQL. Column name is \"sections\" and column type is json[] in below example.
My column looks
I'm not sure you have a json[]
(PostgreSQL array of json
values) typed column, or a json
typed column, which appears to be a JSON array (like in your example).
Either case, you need to expand your array before querying. In case of json[]
, you need to use unnest(anyarray); in case of JSON arrays in a json
typed column, you need to use json_array_elements(json) (and LATERAL joins -- they are implicit in my examples):
select t.id,
each_section ->> 'name' section_name,
each_attribute ->> 'attrkey3' attrkey3
from t
cross join unnest(array_of_json) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where (each_attribute -> 'attrkey3') is not null;
-- use "where each_attribute ? 'attrkey3'" in case of jsonb
select t.id,
each_section ->> 'name' section_name,
each_attribute ->> 'attrkey3' attrkey3
from t
cross join json_array_elements(json_array) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where (each_attribute -> 'attrkey3') is not null;
SQLFiddle
Unfortunately, you cannot use any index with your data. You need to fix your schema first, in order to do that.