PostgreSQL 15中解析JSON数组为键值两列的技术方案问询
解决PostgreSQL解析JSON数组为键值对两列的问题
你原来用的json_populate_recordset需要提前定义匹配所有键的自定义类型,但你的JSON数组里每个对象都是单个不固定的键值对,这种方法不适用。正确的做法是先拆分JSON数组,再展开每个对象的键值对:
直接解析JSON字符串的SQL
SELECT kv.key AS 键列名, kv.value::int AS 值列名 FROM json_array_elements('[ {"vartanyan":1},{"ermilova":2},{"dyakonov":2},{"sokornov":2}, {"shevchenko":2},{"kreslavskaya":2},{"vartanyan":2},{"jusupov":2}, {"kamenkov":2},{"davidiuk":2},{"markhipova":2}, {"voronova":2}, {"karamyshev":2},{"cheryabkin":2},{"sstepanov":2},{"shumeeva":2}, {"balanda":2},{"mineev":2} ]') AS j_obj, json_each(j_obj) AS kv;
如果JSON存储在表列中(假设表名为your_table,JSON列为json_data)
SELECT kv.key AS 键列名, kv.value::int AS 值列名 FROM your_table, json_array_elements(json_data) AS j_obj, json_each(j_obj) AS kv;
说明
json_array_elements把JSON数组拆分成单个的JSON对象行json_each把每个JSON对象展开成键(key)和值(value)的行- 最后把
value转换成你需要的类型(这里是int),并给列起合适的别名
内容的提问来源于stack exchange,提问作者Artur Vartanyan
相关产品推荐
相关产品推荐

