How to get elements from Json array in PostgreSQL

后端 未结 3 925
清酒与你
清酒与你 2021-01-31 11:04

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

3条回答
  •  日久生厌
    2021-01-31 11:30

    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.

提交回复
热议问题