首页 > 编程语言 >深入Java:JSON解析与操作的艺术

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

时间:2024-07-06 19:10:04浏览次数:22  
标签:Map Java tableConfig JSON 解析 ObjectMapper

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

一、初识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。

逐层深入的解析

  • 解析tableConfig为一个Map。
  • tableConfig中获取toolbar为另一个Map。
  • toolbar中获取operationButtons为一个List。
  • 遍历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数据进行相同的操作时,性能优化变得尤为重要。以下是一些提升性能的技巧:

  • 避免重复解析:如果可能,尽量一次性解析整个JSON结构,避免多次解析同一数据。
  • 使用流式API:对于大型JSON文档,可以使用Jackson的流式API进行处理,这样可以在解析时即时进行操作,而不是等到整个文档被加载到内存中。
  • 并行处理:如果操作可以并行化,考虑使用多线程或流处理框架来加速处理速度。

我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!

标签:Map,Java,tableConfig,JSON,解析,ObjectMapper
From: https://www.cnblogs.com/bigleft/p/18287610

相关文章

  • Lock4j简单的支持不同方案的高性能分布式锁实现及源码解析
    文章目录1.Lock4j是什么?1.1简介1.2项目地址1.3我之前手写的分布式锁和限流的实现2.特性3.如何使用3.1引入相关依赖3.2配置redis或zookeeper3.3使用方式3.3.1注解式自动式3.3.2手动式4.源码解析4.1项目目录4.2实现思路5.总结1.Lock4j是什么?1.1简介   ......
  • 3101.力扣每日一题7/6 Java(接近100%解法)
    博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • Java计算机毕业设计疫情防控形势下的高校食堂订餐管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着新冠疫情的全球蔓延,公共卫生安全成为了前所未有的重大挑战。高校作为人员密集且流动性大的场所,其食堂管理面临着巨大的疫情防控压力。传统的食堂......
  • Java计算机毕业设计食品安全监督平台的设计与实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着社会经济的快速发展和人民生活水平的不断提升,食品安全问题日益成为社会关注的焦点。近年来,食品安全事件频发,不仅严重损害了消费者的身体健康,也影......
  • 从零学习的JAVAday1~day7
    作为一个刚要迈入大二的预备程序员,已经学习过了c语言和c++的部分知识,在暑假期间满怀期待的开始Java的学习,希望一个暑假可以对Java的了解加深一些。学习Java首先要学习windows电脑的cmd命令:同时点击键盘上面的win+r键输入cmd即可进入默认的cmd面版,然后我们就可以输入一些命令:比......
  • 面试官:Java线程可以无限创建吗?
    哈喽,大家好......
  • 学生Java学习路程-1
    ok,到了一周一次的总结时刻,我大致会有下面几个方面的论述:1.这周学习了Java的那些东西2.这周遇到了什么苦难3.未来是否需要改进方法等几个方面阐述我的学习路程。这周我主要进行了java开发程序EclipseForJavaDeveloper跟jdk的安装,其中在安装jdk过程中,因为没有安装在C盘中,所以......
  • 【Java】毕业设计个人博客系统 ---- 代码+详解
    目录博客系统项目分析1.数据库设计1.1设计库表1.2代码实现1.3创建项目1.4配置application.yml配置文件2.项目公共模块2.1实体类2.2公共层2.2.1统一返回结果实体类2.2.2统一返回结果处理2.2.3统一异常处理3.获取博客列表3.1持久层数据库相关操作3.2约定......
  • JavaWeb开发基础7个Web术语解析
    7个Web术语Website:staticvsdynamicHTTPHTTPRequestsGETvsPOSTServletContainerServer:WebvsApplicationContentTypeWebsite:staticvsdynamic网站内容包括文本、图片、音频、视频,通过URL来访问。网站分为静态网站和动态网站。静态网站......
  • Java锁
    Java锁1.介绍首先,java的锁分为两类:第一类是synchronized同步关键字,这个关键字属于隐式的锁,是jvm层面实现,使用的时候看不见;第二类是在jdk5后增加的Lock接口以及对应的各种实现类,这属于显式的锁,就是我们能在代码层面看到锁这个对象,而这些个对象的方法实现,大都是直接......