sql - 如何在 postgres 中循环 JSON 数组并访问 JSON 的密钥?
问题描述
我有一个带有几个键值对的自定义 json。我想遍历数组的长度,访问它们的每个键,然后插入到表中。我面临的问题是在循环期间查询无法访问该值。
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;
$$;
解决方案
jsonb 数组上的循环将如下所示
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;
推荐阅读
- c# - 如何将我的代码从使用不记名令牌身份验证更改为基本身份验证以连接到 GraphQl 端点?
- kotlin - 在 Kotlin 中随房间流动
- reporting-services - 如何从不同的数据集中为 SSRS 报告中的参数选择默认值
- django - 如何在 Django 中使用外键的 uuid 进行过滤?
- spring-boot - 从 IntelliJ 社区版启动 springboot 应用程序
- javascript - 加载时无法隐藏按钮
- xml-libxml - XML::LibXML::Node:如何让祖节点采用孙节点,消除父节点?
- excel - Excel中如何根据数量计算和获取总值
- c# - C# - 从 MongoDB.Bson.BsonDocument 生成 SHA/MD5 或类似签名
- python - BS4 查找父类包含劫持的子元素