You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

说明

  1. json_array_elements把JSON数组拆分成单个的JSON对象行
  2. json_each把每个JSON对象展开成键(key)和值(value)的行
  3. 最后把value转换成你需要的类型(这里是int),并给列起合适的别名

内容的提问来源于stack exchange,提问作者Artur Vartanyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:17:17