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

PostgreSQL中提取JSONB对象动态键及对应内容的方法咨询

PostgreSQL中提取JSONB对象动态键及对应内容的方法咨询

嗨,我完全懂你的困扰——这个orgs下面的是JSON对象而非数组,所以用数组下标->0或者路径#>'{orgs, 0}'肯定会报错。咱们可以用PostgreSQL专门为JSON对象键值对设计的函数来解决这个问题,具体操作如下:

假设你的表名为your_table,存储这个JSONB数据的字段名为data,你可以这么写查询语句:

SELECT 
    org_key AS org_id,
    org_value->>'leg' AS leg,
    (org_value->>'oid')::bigint AS oid,
    org_value->>'eTag' AS e_tag,
    org_value->>'ogrn' AS ogrn,
    org_value->>'type' AS type,
    org_value->>'fullName' AS full_name,
    org_value->>'shortName' AS short_name,
    (org_value->>'isLiquidated')::boolean AS is_liquidated
FROM your_table,
     jsonb_each(data->'orgs') AS org_data(org_key, org_value);

我来给你拆解下这个逻辑:

  • jsonb_each(data->'orgs')会把orgs这个JSON对象拆分成键值对的行数据,我们给拆分出来的键和值分别起别名org_key和org_value,这样你就能直接把780162681473这个动态键作为org_id字段拿到手。
  • 之后针对org_value,你就可以用->>操作符提取里面的各个属性,还能根据需要把字段转成对应的数据类型(比如把oid转成bigint,isLiquidated转成boolean)。

如果只是想先单独提取出那个动态的键值,也可以用这个更简单的语句:

SELECT jsonb_object_keys(data->'orgs') AS org_id FROM your_table;

jsonb_object_keys会直接返回orgs下所有的顶级键,刚好能拿到你要的780162681473。

要是你的orgs下面有多个动态键(比如多个组织数据),上面的第一个查询会自动把每个键都拆成单独的行,完全不用修改代码就能适配,非常灵活。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:48:00