不能在数组上调用json_object_keys



如何在临时表中插入sub_mark键和值


CREATE TEMP TABLE temp_marks AS
SELECT json_object_keys(mark_coll->'sub_mark'),mark_coll -> 'sub_mark'
FROM json_array_elements(mark_coll) ; 

函数参数

select * from add_marks('b0c98996-1250-45ef-89f3-9ccaf1d84ed4','{"sub_mark":[{"PAT45":60}]}')   

如果表your_table的列your_column的数据类型是json并且该列中存储的所有值都是json类型的'array',则可以尝试这样做:

CREATE TEMP TABLE temp_marks AS
SELECT json_object_keys(mark_coll->'sub_mark'),mark_coll -> 'sub_mark'
FROM your_table AS t
CROSS JOIN LATERAL json_array_elements(t.your_column) AS mark_coll ;

如果您可以使用jsonb数据类型而不是文档中推荐的json,您可以尝试这个不依赖于jsonb结构的方法:

CREATE TEMP TABLE temp_marks AS
SELECT c->'key', c->'value'
FROM your_table AS t
cross join lateral jsonb_path_query(t.your_column, '$.** ? (@.type() == "object").keyvalue()') as c

最新更新