深入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.mzph.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;甚至项目失败。 因此&…