深入Java:JSON解析與操作的藝術

哈嘍,大家好,我是木頭左!

一、初識JSON:數據格式的優雅舞者

在現代Web開發中,JSON(JavaScript Object Notation)以其輕量級和易于閱讀的特點成為了數據交換的首選格式。它基于JavaScript的一個子集,采用完全獨立于語言的文本格式,使得任何編程語言都能夠輕松解析和生成。

JSON的基本結構

JSON由兩種主要結構組成:對象(在Java中通常對應為Map)和數組。對象以{}括起來,由鍵值對組成;而數組則以[]括起來,包含有序的值列表。

Java中的JSON處理

在Java世界中,有多種庫可以用來解析JSON,例如:org.json, Gson, Jackson等。每個庫都有其特點,但它們共同的目標是為了簡化JSON與Java對象之間的轉換過程。

二、案例驅動:Java如何解析JSON為Map

為了將上述的JSON字符串解析為Map,可以使用Jackson庫的ObjectMapper類。需要添加Jackson的依賴到項目中。

<!-- Maven依賴 -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.3</version> <!-- 版本號可能有所不同,請根據實際情況選擇 -->
</dependency>

接下來,將使用ObjectMapper來解析JSON字符串為Map<String, Object>

import com.fasterxml.jackson.databind.ObjectMapper;public class JsonParserDemo {public static void main(String[] args) {String json = "{\"tableConfig\": {\"toolbar\": {"operationButtons\": [{"isShow\": true}]}}}";try {ObjectMapper objectMapper = new ObjectMapper();Map<String, Object> resultMap = objectMapper.readValue(json, Map.class);System.out.println(resultMap);} catch (IOException e) {e.printStackTrace();}}
}

三、深度操作:逐層解析與修改

為了修改operationButtons中的isShow屬性,需要逐層深入到JSON結構中。這里,將使用JacksonTypeReference來幫助精確地獲取每一層的Map。

逐層深入的解析

  1. 解析tableConfig為一個Map。
  2. tableConfig中獲取toolbar為另一個Map。
  3. toolbar中獲取operationButtons為一個List。
  4. 遍歷List中的每一個Button,找到isShow屬性并修改它。

代碼實現

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Map;public class JsonDeepDive {public static void main(String[] args) {String json = "{\"tableConfig\": {\"toolbar\": {\"operationButtons\": [{\"isShow\": true}]}}}";try {ObjectMapper objectMapper = new ObjectMapper();Map<String, Object> tableConfigMap = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});Map<String, Object> toolbarMap = (Map<String, Object>) tableConfigMap.get("tableConfig");List<Map<String, Boolean>> operationButtonsList = (List<Map<String, Boolean>>) toolbarMap.get("operationButtons");for (Map<String, Boolean> button : operationButtonsList) {button.put("isShow", false);}// 轉回JSON字符串String updatedJson = objectMapper.writeValueAsString(tableConfigMap);System.out.println(updatedJson);} catch (Exception e) {e.printStackTrace();}}
}

四、性能優化:批量操作的技巧

當需要對大量的JSON數據進行相同的操作時,性能優化變得尤為重要。以下是一些提升性能的技巧:

  1. 避免重復解析:如果可能,盡量一次性解析整個JSON結構,避免多次解析同一數據。
  2. 使用流式API:對于大型JSON文檔,可以使用Jackson的流式API進行處理,這樣可以在解析時即時進行操作,而不是等到整個文檔被加載到內存中。
  3. 并行處理:如果操作可以并行化,考慮使用多線程或流處理框架來加速處理速度。

我是木頭左,感謝各位童鞋的點贊、收藏,我們下期更精彩!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18310.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用最通俗的話理解什么是協程

參考&#xff1a; 用最通俗的話理解什么是協程-CSDN博客

FreeRTOS_信號量_學習筆記

信號量的特性 消息隊列用于傳輸多個數據&#xff0c;但是有時候我們只需要傳遞狀態&#xff0c;這個狀態值需要用一個數值表示。套用隊列筆記中的流水線例子&#xff0c;可以理解為流水線上工件的數量。 信號&#xff1a;起通知作用 量&#xff1a;還可以用來表示資源的數量 當…

打印機手動雙面打印技巧

一、WORD和PDF &#xff08;1&#xff09;首先選擇要打印的頁面范圍&#xff0c;然后選擇僅奇數頁打印 &#xff08;2&#xff09;將打印完的紙張翻過來&#xff0c;白紙朝上&#xff0c;紙張的頭部先放入打印機 &#xff08;3&#xff09;選擇要打印的頁面范圍&#xff0c;然…

oracle.jdbc.OracleDatabaseException: ORA-00911: 無效字符

先吐槽一句&#xff0c;oracle 真坑啊&#xff01; 一個很正常的sql 語句一直報 ORA-00911: 無效字符 &#xff0c;拿到數據庫去執行一點問題沒有&#xff0c;一運行代碼就報錯&#xff0c;然后一個字符一個字符的對比&#xff0c;竟然是因為sql 結尾的一個 ";" 導致…

TP6開發文檔概述

TP6&#xff08;ThinkPHP 6&#xff09;是一個使用PHP語言開發的快速、兼容且簡單的面向對象開發框架。以下是一個簡化的TP6開發文檔概述&#xff0c;涵蓋了核心功能和一些常用方法&#xff1a; 一、環境準備 PHP安裝&#xff1a;確保已經安裝了與TP6兼容的PHP版本。 Composer…

PHPIPAM在建立數據庫階段報錯

如題&#xff0c;參考大佬的操作IP地址管理系統phpipam部署-CSDN博客搭建PHPIPAM&#xff0c;不過我沒有選擇1.4&#xff0c;而是直接搭建了1.6版本&#xff0c;一切順利&#xff0c;到了最后建立數據庫階段&#xff0c;輸入數據庫賬號和密碼后提示Cannot install sql SCHEMA f…

大模型部署_書生浦語大模型 _作業2

本節課可以讓同學們實踐 4 個主要內容&#xff0c;分別是&#xff1a; 1、部署 InternLM2-Chat-1.8B 模型進行智能對話 1.1安裝依賴庫&#xff1a; pip install huggingface-hub0.17.3 pip install transformers4.34 pip install psutil5.9.8 pip install accelerate0.24.1…

Elasticsearch之文本分析

文本分析基本概念 官網&#xff1a;Text analysis | Elasticsearch Guide [7.17] | Elastic 官網稱為文本分析&#xff0c;這是對文本進行一直分析處理的方式&#xff0c;基本處理邏輯是為按照預先制定的分詞規則&#xff0c;把原本的文檔進行分割成多個小顆粒度的詞項&#x…

Python pands使用引擎實現excel條件格式

截至我的知識更新日期&#xff08;2023年&#xff09;&#xff0c;Pandas 庫本身并不直接支持Excel條件格式。Pandas 是一個強大的Python數據分析庫&#xff0c;它主要用于數據分析和操作&#xff0c;而不是用于創建或編輯Excel文件的格式。 然而&#xff0c;你可以使用 openp…

如何給出好的“文言一心”指令?

一、文言一心是什么&#xff1f; 在現代技術背景下&#xff0c;“文言一心”還是百度公司創建的一款大語言模型。這款模型基于飛槳深度學習平臺和文心知識增強大模型&#xff0c;并擁有強大的中文語料庫&#xff0c;可以理解和生成富含文化內涵和哲理的文本內容。其核心技術架構…

社區醫院|基于SprinBoot+vue的社區醫院管理服務系統(源碼+數據庫+文檔)

社區醫院管理服務系統 目錄 基于SprinBootvue的社區醫院管理服務系統 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3用戶功能模塊 4醫生功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取…

看花眼,眼花繚亂的主食凍干到底應該怎么選?靠譜的主食凍干分享

隨著科學養貓知識的普及&#xff0c;主食凍干喂養越來越受到養貓人的青睞。主食凍干不僅符合貓咪的飲食天性&#xff0c;還能提供均衡的營養&#xff0c;有助于維護貓咪的口腔和消化系統健康。許多貓主人認識到了主食凍干喂養的諸多益處&#xff0c;計劃嘗試這種喂養方式&#…

學英語材料:單口喜劇、講故事、短劇喜劇以及廣播劇和播客節目

學習英語節目 有名的單口喜劇、講故事、短劇喜劇以及廣播劇和播客節目&#xff1a; 單口喜劇&#xff08;Stand-up Comedy&#xff09; 描述&#xff1a;這是最接近相聲的形式&#xff0c;表演者獨自一人站在舞臺上&#xff0c;用幽默的方式講述個人經歷、觀察到的社會現象或…

C++面向對象程序設計 - 標準輸出流

在C中&#xff0c;標準輸出流通常指的是與標準輸出設備&#xff08;通常是終端或控制臺&#xff09;相關聯的流對象。這個流對象在C標準庫中被定義為std::cout、std::err、std::clog&#xff0c;它們是std::ostream類的一個實例。 一、cout&#xff0c;cerr和clog流 ostream類…

echarts(6大基礎圖表)的使用

目錄 一、vue2掛載 二、柱狀圖 2.1、基礎柱狀圖介紹 2.2、標記&#xff1a;最大值\最小值(markPoint)、平均值(markLine) 2.3、顯示&#xff1a;數值顯示(label)、柱子寬度(barWidth)、橫向柱狀圖 三、折線圖 3.1、標記&#xff1a;最大值\最小值(markPoint)、平均值(ma…

R可視化:組間點圖比較

散點組間比較 散點組間比較 介紹 ggplot2繪制散點組間比較加載R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE)library(tidyverse) library(ggplot2) library(ggprism) library(ggbeeswarm) library(rstatix)rm(list = ls()) options(stringsAsFactors = F) o…

android11禁止進入屏保和自動休眠

應某些客戶要求&#xff0c;關閉了開機進入屏保&#xff0c;一段時間會休眠的問題。以下diff可供參考&#xff1a; diff --git a/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay/frameworks/base/packages/SettingsProvider/res/value…

Python3 筆記:repr() 函數

repr() 函數將對象轉化為供解釋器讀取的形式。 語法&#xff1a; repr(object) 返回一個對象的 string 格式。 tuple1 (1,2,3) print(type(repr((tuple1)))) # 運行結果&#xff1a;<class str> repr(str)與在字符串前加上“r”或“R”的原理有點相似&#xff0c;但…

node模塊的本質

對于一個模塊而言&#xff0c;有兩個關鍵的地方&#xff0c;一是有自己的作用域&#xff0c;二是有對外暴露的接口 不知道大家有沒有想過這樣一個問題&#xff0c;模塊是怎么實現上面兩個特性的呢&#xff1f;其實通過一個 立即執行函數 就可以了 實際上 Node 在編譯的時候&a…

常見5大開發進度盲點問題及解決方案

在軟件開發項目中&#xff0c;識別并解決常見的進度管理盲點問題&#xff0c;對于確保項目按時、按預算、高質量完成至關重要。它直接關系到項目能否順利進行&#xff0c;忽視任何一個問題&#xff0c;都可能導致項目延期、成本超支、質量下降&#xff0c;甚至項目失敗。 因此&…