首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在postgres和JSON的访问键中循环JSON数组?

如何在postgres和JSON的访问键中循环JSON数组?
EN

Stack Overflow用户
提问于 2020-10-07 16:58:21
回答 1查看 207关注 0票数 0

我有一个带有几对键值对的自定义json。我希望遍历数组的长度,并访问它们的每个键,然后插入到表中。我面临的问题是在循环过程中,查询无法访问该值。

代码语言:javascript
运行
复制
do $$
DECLARE
DECLARE fname varchar;
DECLARE lname varchar;
DECLARE StartDate timestamp;
DECLARE EndDate timestamp;
DECLARE DateText varchar;
DECLARE uniqueData jsonb = '[
    {
        "fname": "PERFFBB",
        "lname": "PERFE59-AB1899A-A8CAE59-AB1899A-AB1899A-AB1899A-AB1899A-A8CAE59"
    },
    {
        "fname": "PERFD34",
        "lname": "PERFCD5-232D322-BD88CD5-232D322-232D322-232D322-232D322-BD88CD5"
    },
]';
begin for r in 1..(jsonb_array_length(uniqueData) - 1)
loop 
fname = uniqueData[r].fname;
lname = uniqueData[r].lname;
-- this is giving a problem. It is unable to access the key.
for z in 1..2 
loop 
StartDate = current_date::timestamp - concat(z, ' day')::interval;
EndDate = current_date::timestamp - concat(z - 1, ' day')::interval - interval '1 seconds';
DateText = (
    to_char(
        'now'::timestamp - concat(z, ' day')::interval,
        'Mon DD, YYYY'
    )
);
INSERT INTO table (
        col1,
        col2,
        col3,
        col4,
        col5
    )
values (
        fname,
        lname,
        StartDate,
        EndDate,
        DateText
    );
end loop;
end loop;
end;
$$;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 17:36:37

jsonb数组上的循环如下所示

代码语言:javascript
运行
复制
DECLARE var1 RECORD;
...
FOR var1 IN
  SELECT * FROM jsonb_to_recordset(uniqueData) as x(fname text, lname text)
LOOP
  -- var1 contains fname and lname fields
  fname = var1.fname;
  lname = var1.lname;

  .....

END LOOP;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64248799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档