深入Java:JSON解析与操作的艺术

news2024/9/24 7:25:48

哈喽,大家好,我是木头左!

一、初识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.coloradmin.cn/o/1706384.html

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

相关文章

Python教程:使用Python和PyQt编写进制转换器工具

1.介绍 在现代计算中&#xff0c;进制转换是一项常见且重要的任务。为了简化这个过程&#xff0c;我们也可以利用Python和PyQt自己写一个直观且易于使用的进制转换器工具。这个工具将支持二进制、八进制、十进制和十六进制的相互转换&#xff0c;并提供良好的用户界面和交互体…

finetuning大模型准备(基于Mac环境)

为finetuning进行的热身准备&#xff0c;涉及周边的软件工具&#xff0c;方法。 问题1&#xff1a;finetuning过程较长&#xff0c;采用系统自带命令行没有后台&#xff0c;前台被杀后&#xff0c;容易造成训练失败。 解决方法&#xff1a; tmux可以开启后台训练 问题2&…

参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2

参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2 参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 今天&#xff0c;我们继续了解下来自清华大学发布的两种参数高效微调方法P-Tuning和P-Tuning v2。可以简单的将P-Tuning是认为针对Prompt Tuning的改进…

P9 【力扣+知识点】【算法】【二分查找】C++版

【704】二分查找&#xff08;模板题&#xff09;看到复杂度logN&#xff0c;得想到二分 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0…

“揭秘:为什么羊驼Ollama成为计算机运行大型语言模型的最佳拍档?“

最近&#xff0c;AIM 评测了在计算机上本地运行大语言模型&#xff08;LLM&#xff09;的最佳工具&#xff0c;Ollama 脱颖而出&#xff0c;成为最高效的解决方案&#xff0c;提供了无与伦比的灵活性。Ollama 是 Jeffrey Morgan 开发的一款开源工具&#xff0c;它正在彻底改变爱…

网络渗透day2

Windows登录的明文密码存储过程和密文存储位置 明文密码存储过程&#xff1a; Windows操作系统不会以明文形式存储用户密码。相反&#xff0c;当用户设置或更改密码时&#xff0c;系统会对密码进行哈希处理&#xff0c;然后存储其哈希值。哈希处理的目的是为了提高密码的安全性…

前端SEO优化包括哪些方面?

前端SEO优化主要关注网站的用户体验和页面内容的呈现&#xff0c;以确保网站对搜索引擎友好并能吸引用户 首先&#xff0c;要注意页面结构&#xff0c;用对的HTML标签比如标题和段落&#xff0c;这样搜索引擎更容易理解你的网页是怎么组织的&#xff0c;同时&#xff0c;保持H…

Linux 系统中 ODBC 驱动的安装与配置指南

Linux 下的 ODBC 包 从发布包中获取&#xff0c;包名为 openGauss-*.*.0-ODBC.tar.gz。Linux 环境下&#xff0c;开发应用程序要用到 unixODBC 提供的头文件&#xff08;sql.h、sqlext.h 等&#xff09;和库 libodbc.so。这些头文件和库可从 unixODBC-2.3.0 的安装包中获得。 …

@EnableConfigurationProperties源码解析

前言 EnableConfigurationProperties注解的使用&#xff0c;请移步相关博文&#xff1a;EnableConfigurationProperties注解使用 前置知识 Import注解作用简述 注入的类一般继承 ImportSelector 或者 ImportBeanDefinitionRegistrar 接口 继承ImportSelector接口&#xff…

黑龙江某市数字孪生地下水监测系统平台项目建设经验

项目背景 地下水是一种特殊而珍贵的资源&#xff0c;它具有不可替代性&#xff0c;与经济发展及人民生活息息相关&#xff0c;针对日趋严峻的水资源危机&#xff0c;如何合理利用有限的水资源&#xff0c;保障国民经济的可持续发展是一个迫切需要解决的问题。 黑龙江某市积极…

SpringMvc-restful设计风格

Restful 1、入门1.1 简介1.2 实例 1、入门 1.1 简介 RESTFul是什么 RESTFul是WEB服务接口的一种设计风格。 RESTFul定义了一组约束条件和规范&#xff0c;可以让WEB服务接口更加简洁、易于理解、易于扩展、安全可靠。 1.2 实例 web.xml <?xml version"1.0"…

系统测试需求指南(Word版-软件全套资料下载)

1 目的 2 概述 3 测试需求 3.1 测试范围 3.2 测试目标 4 测试需求的现状 5 测试需求的内容 5.1 主体内容 5.2 管理内容 6 测试需求的制定 6.1 需求信息来源 6.2 需求分析 6.2.1 功能性需求 6.2.2 系统功能需求 6.2.3 界面需求 6.2.4 安装需求 6.2.5 业务需求 …

教师信息素养四个方面是什么

在这个信息爆炸的时代&#xff0c;老师们该如何提升自己的信息素养&#xff1f;信息素养&#xff0c;这个看似简单的概念&#xff0c;实际上包含着丰富的内涵和多维度的技能。它不仅仅是获取信息的能力&#xff0c;更是一种综合运用信息资源&#xff0c;解决教学和生活中问题的…

gRPC 状态码解读:一文看懂

gRPC 是什么&#xff1f; gRPC&#xff08;gRPC Remote Procedure Call&#xff09;是一个高性能的开源框架&#xff0c;它通过远程过程调用&#xff08;RPC&#xff09;机制促进应用程序之间的通信。 gRPC 框架使客户端应用程序能够调用不同机器上的服务器应用程序的方法&am…

零拷贝(Zero Copy)

目录 零拷贝&#xff08;Zero Copy&#xff09; 1.什么是Zero Copy? 2.物理内存和虚拟内存 3.内核空间和用户空间 4.Linux的I/O读写方式 4.1 I/O中断原理 4.2 DMA传输原理 5.传统I/O方式 5.1传统读操作 5.2传统写操作 6.零拷贝 6.1.用户态直接IO 6.2.mmapwrite …

计算机图形学入门02:线性代数基础

1.向量&#xff08;Vetors&#xff09; 向量表示一个方向&#xff0c;还能表示长度&#xff08;向量的摸&#xff09;。一般使用单位向量表示方向。 向量加减&#xff1a;平行四边形法则、三角形法则。比卡尔坐标系描述向量&#xff0c;坐标直接相加。 1.1向量点乘&#xff08;…

帆软报表点击表格给数据集传递参数案例

一、效果 有四个模块&#xff0c;分别是采购总金额&#xff0c;采购总数量&#xff0c;采购合同数量&#xff0c;采购合同申请数量通过点击单元格上的月份&#xff0c;展示不同的月份数据&#xff0c;进行单元格和表格之间的联动 二、准备好数据库表和展示数据内容 2.1 建表 …

英语四级翻译练习笔记③——大学英语四级考试2023年12月真题(第三套)

目录 引言&#xff08;必看&#xff09; 四级翻译评分标准分析及真题解析 四级翻译评分标准 四级翻译真题 学生作答 1. 评分 2. 修正翻译中的错误 错误标记&#xff1a; 3. 改正句子 4. 标出错误单词 5. 标准答案 6. 常考万能句子 7.重点单词的中文意思 引言&…

Excel未响应时强关后,Excel插件消失

目录 我们分析一下插件消失的原因&#xff1a; 针对上面表现出来的2个问题&#xff0c;进行针对性的解决 &#xff1a; 1、不被关进去&#xff0c;是不是就没有后续的一系列的问题了&#xff0c;各自安好 2、保留住自动加载的行为 PS&#xff1a;配置受信任的位置注册列表…

【K8s】专题四(1):Kubernetes 控制器简介

以下内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01;如果对您有帮助&#xff0c;烦请点赞、关注、转发&#xff01;欢迎扫码关注个人公众号&#xff01; 目录 一、基本概念 二、工作原理 三、常见类型 四、相关特性 一、基本概念 Kubernetes 控制器…