从 Postgresql 中的复杂 json 字段类型中提取一些值

Extract some value from complex json field type in Postgresql

我有 postgres table(比方说 my_table)包含 JSON 字段(比方说 json_field) 作为:

(1, {"data": [{"val_a":1, "b":"somevalue"}, {"val_a":2, "b":"othervalue"}, ...]}),  
(2, {"data": [{"val_a":22, "b":"somevalue2"}, {"val_a":12, "b":"othervalue2"}, ...]}),  
....  
(n, {"data": [{"val_a":11, "b":"somevaluen"}, {"val_a":122, "b":"othervaluen"}, ...]})

我只想 return ARRAY - int[] of val_a 值。

我试过存储过程(plpgsql),如下:

declare
    data_array json[];
    vals float8[];
begin
    SELECT json_field->'data' into data_array FROM my_table;
    FOREACH i IN ARRAY data_array
        vals := array_append(vals, i->'val_a')
        -- nor array_append(vals, i->'val_a') works
    END LOOP;
    return vals;
end;

这给我语法错误:
array_append(vals, i->'val_a').

提取val_a的最佳方法是什么?

使用 PostgreSQL 12.6

使用 JSONPATH 表达式:

SELECT jsonb_path_query_array(json_field, '$.data[*].val_a') FROM my_table;

 jsonb_path_query_array 
------------------------
 [1, 2]
(1 row)

从 PostgreSQL v12 开始可用。