PGsql 解析json及json数组

创建测试数据

drop table if exists json_test;
create table json_test as
select
'111' as id,
'{"nodes":{"1692328028076":{"nodeId":"1692328028076","nodeName":"测试表1","nodeType":"DATACOLLECT","nodeConfig":{"nodeName":"测试表1","retryTimes":3,"configNoId":"1691325111866490880","configNo":"1691325111866490880","iocNo":"","id":"1692328028076"}},"1692328056195":{"nodeId":"1692328056195","nodeName":"测试表2","nodeType":"DATASYNC","nodeConfig":{"nodeName":"测试表2","retryTimes":3,"configNoId":"1691324890486931456","configNo":"1691324890486931456","iocNo":"","id":"1692328056195"}},"1692340398058":{"nodeId":"1692340398058","nodeName":"测试表3","nodeType":"HIVESQL","nodeConfig":{"nodeName":"测试表3","retryTimes":3,"configNoId":"1691324637188718592","configNo":"1691324637188718592","iocNo":"","id":"1692340398058"}}},"linkList":[{"name":"polyline","id":"258b0971","toId":"1699601569911","fromId":"1692340398058"},{"name":"polyline","id":"ac3c907","toId":"4db01ba","fromId":"1692340417936"},{"name":"polyline","id":"3db3281f","toId":"f57d111","fromId":"1692328056195"}]}'as json_data
union all
select
'222' as id,
'{"nodes":{"1692328028076":{"nodeId":"1692328028076","nodeName":"测试表4","nodeType":"DATACOLLECT","nodeConfig":{"nodeName":"测试表4","retryTimes":3,"configNoId":"1691325111866490880","configNo":"1691325111866490880","iocNo":"","id":"1692328028076"}},"1692328056195":{"nodeId":"1692328056195","nodeName":"测试表5","nodeType":"DATASYNC","nodeConfig":{"nodeName":"测试表5","retryTimes":3,"configNoId":"1691324890486931456","configNo":"1691324890486931456","iocNo":"","id":"1692328056195"}},"1692340398058":{"nodeId":"1692340398058","nodeName":"测试表6","nodeType":"HIVESQL","nodeConfig":{"nodeName":"测试表6","retryTimes":3,"configNoId":"1691324637188718592","configNo":"1691324637188718592","iocNo":"","id":"1692340398058"}}},"linkList":[{"name":"polyline","id":"258b0971","toId":"1699601569911","fromId":"1692340398058"},{"name":"polyline","id":"22ac3c907","toId":"224db01ba","fromId":"22692340417936"},{"name":"polyline","id":"223db3281f","toId":"22f57d111","fromId":"221692328056195"}]}'as json_data

数据展示

select
id,
json_data :: json -> 'nodes' as nodes,
json_each(json_data :: json -> 'nodes') as each_nodes
from
json_test

问题一

查询出nodes中nodeConfig对应的key和value

select 
id,
nodes::json->'nodeId' as nodeId,
nodes::json->'nodeType' as nodeType,
nodes::json->'nodeName' as nodeName,
replace(json_each(nodes::json->'nodeConfig')::varchar,'""','') as nodeConfig,
replace(regexp_replace(replace(json_each(nodes::json->'nodeConfig')::varchar,'""','')::varchar,',.*$','',''),'(','') as nodeconfig_key,
replace(replace(regexp_replace(replace(json_each(nodes::json->'nodeConfig')::varchar,'""','')::varchar,'^([^,]*,)','',''),'"""',''),')','') as nodeconfig_valuefrom 
(
select
id,
replace(substring(regexp_replace(each_nodes :: varchar, '^([^,]*,)', '')
from 2 for length(regexp_replace(each_nodes :: varchar, '^([^,]*,)', '')) -3),'""','"') as nodes
from
(
select
id,
json_each(json_data :: json -> 'nodes') as each_nodes
from
json_test
) t
) t

问题二

查询出linkList中的fromId和toId

select
id,
json_array_elements(json_data :: json -> 'linkList') as linkList,
json_array_elements(json_data :: json -> 'linkList')->'fromId' as fromId,
json_array_elements(json_data :: json -> 'linkList')->'toId' as toId
from
json_test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/655318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇2)

目录 T1工作在方式2时 T0工作在方式3时 四种工作方式的总结 定时计数器对输入信号的要求 定时计数器对的编程的一个要求 关于初值计算的问题 4种工作方式的最大定时时间的大小 关于编程方式的问题 实例分析 实例1 实例2 T1工作在方式2时 51单片机,有两个…

vue实践:构建高效的电子签名功能

前言 在现代数字化时代,电子签名成为了一种方便、高效且安全的签署文件的方式。本文将介绍电子签名的原理和实现方法,帮助你快速掌握这一重要的工具。 电子签名是什么? 电子签名是一种数字化的签名方式,用于验证和确认电子文档、…

matlab appdesigner系列-app程序打包成可执行exe程序

提供了3种打包方式: 1)Matlab App ,这种方式是生成Matlab内部使用的小程序,可添加到matlab app菜单栏中的常用程序中,也就是应用该程序之前,你必须安装了matlab; 2)Web app 3&…

vs 撤销本地 commit 并保留更改

没想到特别好的办法,我想的是用 vs 打开 git 命令行工具 然后通过 git 命令来撤销提交,尝试之前建议先建个分支实验,以免丢失代码, git 操作见 git 合并多个 commit / 修改上一次 commit

GDB调试技巧实战--自动化画出类关系图

1. 前言 上节我们在帖子《Modern C++利用工具快速理解std::tuple的实现原理》根据GDB的ptype命令快速的理解了std::tuple数据结构的实现,但是手动一个个打印,然后手动画出的UML图,这个过程明显可以自动化。 本文旨在写一个GDB python脚本把这个过程自动化。 本脚本也可以用…

2024年Java高阶面试题

2024年Java实战面试题(北京)_java 5 年 面试-CSDN博客 一、在面对千万条并发请求的情况下,如果数据库频繁查询导致崩溃,可以采取以下措施来解决问题: 1.缓存数据:可以使用缓存技术来减少对数据库的查询次数。将经常查询的数据存储…

2024.1.29 GNSS 学习笔记

1.假设只对4颗卫星进行观测定位,卫星的截止高度角是15,那么如何布设这四颗卫星的位置,使其围成的四面体的体积得到最大,以获得最好定位精度? 答:3颗卫星均匀分布在最低仰角面上,第4颗卫星在测站…

华为笔记本matebook pro X如何扩容 C 盘空间

一、前提条件 磁盘扩展与合并必须是相邻分区空间,且两个磁盘类型需要相同。以磁盘分区为 C 盘和 D 盘为例,如果您希望增加 C 盘容量,可以先将 D 盘合并到 C 盘,然后重新创建磁盘分区,分配 C 盘和 D 盘的空间大小。 访…

git push后,如何撤销git log上的错误注释

修改了本地的代码,执行了下面的操作,提交之后,怎么样修改 git add ********(文件名)//git add 添加修改文件名之后 git commit //git commit 在当前分支提交,编写提交注释 git push //git push 提交修…

Android T 远程动画显示流程(更新中)

序 本地动画和远程动画区别是什么? 本地动画:自给自足。对自身SurfaceControl矢量动画进行控制。 远程动画:拿来吧你!一个app A对另一个app B通过binder跨进程通信,控制app B的SurfaceControl矢量动画。 无论是本地动画还是远程…

C++ Qt开发:运用QJSON模块解析数据

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QJson组件的实现对JSON文本的灵活解析…

Filter过滤器学习使用

验证token 对外API过滤器 public class APIFilter implements Filter {private static Logger logger LogManager.getLogger(APIFilter.class);private ICachedTokenService tokenService;public APIFilter(ICachedTokenService tokenService) {super();this.tokenService …

echarts:获取省、市、区/县、镇的地图数据

目录 第一章 前言 第二章 获取地图的数据(GeoJSON格式) 2.1 获取省、市、区/县地图数据 2.2 获取乡/镇/街道地图数据 第一章 前言 需求:接到要做大屏的需求,其中需要用echarts绘画一个地图,但是需要的地图是区/县…

C语言系列-整数在内存中的存储大小端字节序

🌈个人主页: 会编程的果子君 ​💫个人格言:“成为自己未来的主人~” 目录 整数在内存中的存储 大小端字节序和字节序判断 什么是大小端 为什么会有大小端 练习 整数在内存中的存储 在讲解操作符的时候,我们就讲过了下面的内容 整数的2…

高端车规MCU的破局之路

目录 1 低质量的无效内卷 2 高端车规MCU产品共性 2.1 支持标定测量 2.2 低延迟通信加速 2.3 完备的网络安全解决方案 2.4虚拟化 3 国产替代的囚徒困境 1 低质量的无效内卷 近几年,车规MCU国产替代的呼声此消彼长,但仍然集中在低端产品。 从产…

JavaSE-网络编程,正则表达式

1. 网络编程 1.1 概述 Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层 细节被隐藏在 Java 的本机安装系统…

鸿蒙首批原生应用!无感验证已完美适配鸿蒙系统

顶象无感验证已成功适配鸿蒙系统,成为首批鸿蒙原生应用,助力鸿蒙生态的快速发展。 作为全场景分布式操作系统,鸿蒙系统旨在打破不同设备之间的界限,实现极速发现、极速连接、硬件互助、资源共享。迄今生态设备数已突破8亿台&…

R语言【taxlist】——tax2traits():将分类信息设置为分类单元特征

Package taxlist version 0.2.4 Description 分类法分类可以包含在taxonRelations插槽提供的信息中的 taxlist 对象中。然而,对于统计分析来说,将这些信息插入到插槽taxonTraits中可能更方便。 Usage tax2traits(object, ...)## S3 method for class …

多openssl版本共存,如何再装一个openssl低版本

在编译安装TrinityCore的时候,碰到报错: 报错: CMake Error at cmake/macros/FindOpenSSL.cmake:579 (message): TrinityCore needs OpenSSL version 1.0 but found too new version . TrinityCore needs OpenSSL 1.0.x or 1.1.x to wor…

软考复习之数据结构篇

算法设计 迭代法:用于求方程的近似根。 1、若方程无解,则算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考查方程是否有解,并在程序中对迭代的次数给予限制。 2、方程虽有解&#…