无法将jsonb转换为row

问题描述 投票:0回答:1

我想要每个用户的行格式的 jsonb 输出。如果用户有 2 个主题,则应为该用户创建 2 行。在某些 JSON 中,会出现

certidate
。如果
certidate
不存在,则应将
createdOn
用作输出中的证书日期。

我的桌子如下所示:-

create table rewards
(
id serial primary key,
userid varchar(50),
details jsonb
);

表中的详情栏有以下记录

JSON1

[
  {
    "score": 80,
    "createdOn": 1664494754585,
    "subject": "Math"
  }  
]

JSON2

[
  {
    "score": 70,
    "certidate": 1664494754515,
    "subject": "Science"
  }  
]

JSON3

[
  {
    "score": 85,
    "certidate": 1664494754250,
    "subject": "Science"
    "score2": 85,
    "certidate2": 1664494754250,
    "subject2": "Math"
  }  
]

输出应以以下格式显示:-

id | userid | subject | certificate_date 

我知道 jsonb_array_elements 可能可以解决问题,但我什至看不到以下查询的任何行:-

SELECT *
FROM rewards r, 
jsonb_array_elements(r.details->'createdOn') as createdOn;
json postgresql jsonb
1个回答
0
投票

所有 json 看起来都像 1 元素表,因此您可以更改 json 格式或要求表的第一个元素

select *,createdOn.value->'createdOn' from rewards r, jsonb_array_elements(r.details) as createdOn;

要从第一个元素表中获取值,您可以使用

select details->0->'createdOn' from rewards r;
© www.soinside.com 2019 - 2024. All rights reserved.