频繁操作Json嵌套数据PostgreSQL配合JSON操作工具类+sql

文章目录

  • 1.工具类
  • 2.依赖
  • 3.sql

本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得

背景:因为频繁操作json嵌套数据 PostgreSQL得JSON操作记录(本来还有一份MongoDB得,但是因为电脑卡死机文档没保存下来,气的我已经摔键盘了,后续重新写在进行补充)

1.工具类

 
package com.xhao.PostgreSQL;import com.alibaba.fastjson2.JSON;
import com.jayway.jsonpath.JsonPath;
import org.springframework.util.ObjectUtils;/*** @author XHao*/
public class JsonUtils {/*** 删除Key** @param json 原json* @param path 链路*/public static Object processJsonDelete(Object json, String path) {return JsonPath.parse(JSON.parse(json.toString())).delete(path).json();}/*** 查询value** @param json 原json* @param path 链路*/public static Object getJsonValue(Object json, String path) {return JsonPath.parse(JSON.parse(json.toString())).read(path).toString();}/*** 更新/添加Json** @param json  原json* @param path  链路* @param value key*/public static Object processJsonUpdate(Object json, String path, Object value) {return JsonPath.parse(JSON.parse(json.toString())).set(path, value).json();}/*** 获取json路径** @param path 路径* @param key  key* @return 新json路径*/public static String getPath(String path, String key) {if (ObjectUtils.isEmpty(key)) {return getPath(path);} else if (key.matches("\\d+")) {return getPath(path) + "[" + key + "]";} else {return getPath(path) + "." + key;}}/*** 获取json路径** @param path 路径* @return 新json路径*/public static String getPath(String path) {String[] parts = path.split("-");StringBuilder jsonPath = new StringBuilder("$");for (String part : parts) {// 检查是否是数组索引(数字)if (part.matches("\\d+")) {jsonPath.append("[").append(part).append("]");} else {jsonPath.append(".").append(part);}}return jsonPath.toString();}public static void main(String[] args) {String str = "option-series-0-emphasis-textStyle";String str1 = null;System.err.println(getPath(str, str1));System.err.println(getPath(str));}
}

2.依赖

   <!-- Hibernate 类型扩展 --><dependency><groupId>com.vladmihalcea</groupId><artifactId>hibernate-types-52</artifactId><version>2.14.0</version></dependency><!-- JsonPath --><dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.7.0</version></dependency><!-- PostgreSQL 驱动 --><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId></dependency>

3.sql


//查询
SELECT json->'option'->'xAxis'->0->>'show' AS show_value
FROM "public".test
WHERE id = 1;//修改
UPDATE "public".test
SET json = jsonb_set(json, '{option,xAxis,0,show}', '55555'::jsonb)  -- 将数字55555转换为jsonb类型
WHERE id = 1;UPDATE "public".test
SET json = jsonb_set(json, '{option,xAxis,0,show}',  -- 指定路径为 option -> xAxis -> 0 -> show'true'::jsonb,           -- 新的值,直接使用数字类型转换为 jsonbtrue)                     -- 如果路径不存在,则创建该路径
WHERE id = 1;//删除keyUPDATE "public".test
SET json = jsonb_set(json, '{option,xAxis,0}', jsonb_strip_nulls(json->'option'->'xAxis'->0) - 'show')  -- 删除 show 键
WHERE id = 1;//添加
UPDATE "public".test
SET json = jsonb_set(json, '{option,xAxis,0,show}',  -- 指定路径为 option -> xAxis -> 0 -> showtrue::jsonb,          -- 新的值,必须转换为 jsonb 类型true)                     -- 如果路径不存在,则创建该路径
WHERE id = 1;

因为电脑卡死机导致调研文档得MongoDB得demo没了,我也很苦恼后续重新写的话在更新

如果点赞多,评论多会更新详细教程,待补充。

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

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

相关文章

京东云 centos vim有操作混乱的问题

centos云服务器 安装micro编辑器可以解决 yum install micro

限流系列之二:TDMQ CKafka 版限流方案详解及最佳实践

导语 在当今大数据和实时通信的时代&#xff0c;消息队列在分布式系统中扮演着至关重要的角色。CKafka 作为一种高性能、高可靠的消息中间件&#xff0c;被广泛应用于各种业务场景中。然而&#xff0c;随着业务的增长和数据流量的增加&#xff0c;CKafka 在生产者和消费者以极…

消息队列的基本概念

文章目录 为什么需要消息队列&#xff1f;&#x1f914;&#x1f3af; 核心价值&#x1f4cb; 使用场景 &#x1f3d7;️ 架构层面的基本概念整体架构图&#x1f4e6; 核心组件详解1. Broker&#xff08;消息代理&#xff09;2. Topic&#xff08;主题&#xff09;3. Partition…

Shell脚本中和||语法解析

https://www.cnblogs.com/liuyuelinfighting/p/16377705.html 在 Shell 脚本中&#xff0c;&& 和 || 是逻辑操作符&#xff0c;用于根据前一个命令的退出状态&#xff08;成功或失败&#xff09;决定是否执行后续命令。这种语法称为 命令链&#xff08;Command Chainin…

MySQL中的常见运算符

精选专栏链接 &#x1f517; MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅&#xff0c;点赞&#xff0b;关注&#xff0c;每日精进1%&#xff0c;共攀技术高峰 更多内容持续更新中&#xff01;希望能给大家带来帮助~ &…

高级IO技术详解:阻塞/非阻塞IO、多路复用与内存映射

高级IO技术详解&#xff1a;阻塞/非阻塞IO、多路复用与内存映射 关键词&#xff1a;阻塞IO 非阻塞IO select/poll/epoll mmap 一、阻塞IO vs 非阻塞IO 类型行为特点设置方式阻塞IO- 读空管道阻塞- 写满管道阻塞默认模式非阻塞IO- 读空文件返回 -1&#xff0c;errnoEAGAIN- 写满…

【无标题】拓扑对偶框架的严格性补完与哲学突破

拓扑对偶框架的严格性补完与哲学突破&#xff1a; 一、数学严格性补完&#xff1a;同调类守恒的解决方案 1.1 负系数问题的几何化修正 **问题本质**&#xff1a;当 $a_i$ 含负数时&#xff0c;曲率分配 $\kappa\frac{2\pi a_i}{A_{\text{max}}}$ 导致伪黎曼流形 **解决方案…

从0开始学习R语言--Day25--A/B测试 vs 多臂老虎机

通常在比较两个不同的方案对数据的影响时&#xff0c;我们会各拿50%的数据去进行对照试验&#xff0c;这样观测到的结果会最大程度地保留统计学上的特点。但实际上&#xff0c;并不是所有对比不同方案都要这样做&#xff0c;一来&#xff0c;我们需要等到两组实验都完全结束后&…

功耗高?加密弱?爱普特APT32F1023H8S6单片机 2μA待机+AES硬件加密破局

爱普特APT32F1023H8S6单片机深度解析 1. 产品定位 APT32F1023H8S6 是爱普特半导体&#xff08;APT&#xff09;推出的 32位高性能单片机&#xff0c;基于 ARM Cortex-M0内核&#xff0c;主打 高集成度、低功耗、高性价比&#xff0c;面向消费电子、工业控制和物联网领域。 2. …

【MFC】绘制自定义控件-显示图片(支持放大操作)

目录 一、CDC类&#xff08;二级缓存&#xff09;二、计算视口三、放大操作代码中初始化操作&#xff08;方便以后cv&#xff09; 一、CDC类&#xff08;二级缓存&#xff09; CDC类是设备上下文的核心类&#xff0c;它的作用是抽象化对图形输出设备&#xff08;像屏幕、打印机…

在Proteus新工程中放置基本元器件

视频教程&#xff1a; [最详细]Proteus新建第一个工程与快捷键设置 操作步骤 1选择这个黄色的三角&#xff0c;然后点击旁边的P,开始找元件。 2点开P后&#xff0c;呈现如下图界面&#xff0c;我们在Keyword栏中&#xff0c;输入stm32&#xff0c;然后他会自动出现对应的元件&…

PRUD币推动健康数据资产化,开启Web3隐私金融新时代

在全球健康科技与数据主权浪潮下&#xff0c;PRUD币&#xff08;Prudential Utility & Data Token&#xff09;正成为Web3健康金融领域中的重要通证。项目通过链上身份绑定、健康行为证明、隐私计算与NFT机制&#xff0c;为用户打造了“健康数据资产化”的创新路径&#xf…

Mac 安装 finalshell

1.下载 地址&#xff1a;FinalShell官网 第一个进入选择对应的 mac 版本下载。 下一步下一步完成安装。 2.链接虚拟机&#xff0c;点击图示文件夹 点击新建链接&#xff0c;新建 SSH 链接 3.去 vmware 中查询 Linux 系统的 IP,使用 ip addr 命令或者 ifconfig 命令皆可。 ip…

Javaweb - 2 HTML

目录 HTML 入门 1. HTML & CSS & JavaScript 的作用 2. 什么是 HTML 3. 什么是超文本 4. 什么是标记语言 5. HTML 基本结构 6. HTML 概念词汇解释 7. HTML 的一些语法规则 8. 开发工具 VsCode 安装插件&#xff1a; 常见设置&#xff1a; HTML 常见标签 …

CWGAN-GP 增强型 CAE 在非 IID 数据集中用于 5G-NR 干扰检测

抽象 在不断扩大的 5G-NR 无线蜂窝网络领域中&#xff0c;无线干扰攻击作为安全攻击普遍存在&#xff0c;损害了接收信号的质量。我们通过将加性高斯白噪声 &#xff08;AWGN&#xff09; 合并到真实世界的同相和正交 &#xff08;I/Q&#xff09; OFDM 数据集中来模拟干扰环境…

JavaEE-Spring-Web-Mvc

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc)&#xff0c;但它通常被称为"Spring MVC". Servlet 是⼀种实现动态⻚⾯的技术. 准确来讲Serv…

Linux从入门到入门

系统教程学习类 Ubuntu 从入门到精通 系统页面/基本操作类 Ubuntu20.04终端固定终端到左边的导航栏_ubuntu20.04设置菜单固定-CSDN博客Ubuntu 20.04 系统5分钟后老是自动锁屏_修改锁屏时间-CSDN博客 命令类 拷贝&#xff1a;将 下载 文件夹里的.sh文件 复制到opt目录下 sudo cp…

AI自动生成Git提交信息-git AI Commit

在现代软件开发中&#xff0c;编写清晰且一致的Git提交信息对于维护项目历史和促进团队协作至关重要。然而&#xff0c;为每次变更手动撰写描述性提交信息可能耗时&#xff0c;尤其是处理复杂差异或大型项目时。AI Commit 是一个利用AI分析Git差异并生成符合Conventional Commi…

【三大前端语言之一】样式:CSS详解

【三大前端语言之一】样式&#xff1a;CSS详解 在了解完HTML的有关知识后&#xff0c;我们应该知道&#xff0c;一个网页光有框架还不行&#xff0c;必须还得有装饰它的样式。就好比房子的结构搭好了&#xff0c;但如果没有油漆、没有窗帘、没有家具&#xff0c;就无法真正展现…

Spring AI 聊天记忆功能实战(一):从接口设计到生产实践

Spring AI 聊天记忆功能实战&#xff08;一&#xff09;&#xff1a;从接口设计到生产实践 在构建AI对话应用时&#xff0c;聊天记忆管理及存储是实现连贯上下文交互的关键组件。而大模型&#xff08;LLM&#xff09;本质上是无状态的&#xff0c;这意味着它们不会保留历史交互…