頻繁操作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
英文地址,請注明出處:http://en.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;這意味著它們不會保留歷史交互…