【问题标题】:How to parse jsonb field into columns without keys in PostgreSQL如何在 PostgreSQL 中将 jsonb 字段解析为没有键的列
【发布时间】:2021-07-08 11:12:21
【问题描述】:

我有表login( id int, meta_skills jsonb),但jsonb 没有存储在键值对中。

jsonb 字段中的数据如下所示

{
  "Cat1": [
    {
      "Skill_1": 2,
      "Skill_2": 2,
      "Skill_3": 2,
      "Skill_4": 2,
      "Skill_5": 2
    }
  ],
  "Cat2": [
    {
      "Skill_1": 3,
      "Skill_2": 2,
      "Skill_3": 3
    }
  ],
  "Cat3": [
    {
      "Skill_1": 2,
      "Skill_2": 2,
      "Skill_3": 2,
      "Skill_4": 2
    }
  ]
}

技能值是随机值。 我想准备以下格式的数据

【问题讨论】:

  • 那不是有效的 JSON。你能修复样品吗?
  • @LaurenzAlbe 删除了令人不安的逗号,我认为有些解析器不在乎。

标签: arrays json postgresql jsonb


【解决方案1】:

您必须取消嵌套级别:

SELECT login.id,
       u1.category,
       u3.skill,
       u3.level
FROM login
   CROSS JOIN LATERAL jsonb_each(login.meta_skills) AS u1(category,v)
   CROSS JOIN LATERAL jsonb_array_elements(u1.v) AS u2(v)
   CROSS JOIN LATERAL jsonb_each(u2.v) AS u3(skill, level);

【讨论】:

  • 非常感谢。这绝对有效,我第一次看到使用 JSON 函数进行连接。
猜你喜欢
  • 2015-07-16
  • 2021-05-16
  • 1970-01-01
  • 2023-03-13
  • 2019-10-02
  • 2019-10-10
  • 2020-04-09
  • 2021-02-12
相关资源
最近更新 更多