news 2026/8/28 19:52:54

Java处理JSON编程实用技巧

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java处理JSON编程实用技巧

以下是2025–2026年视角下,Java 处理 JSON最实用、最常被用到的技巧汇总(主要基于目前最主流的几种库)。

目前主流选择排序(推荐优先级):

排名推荐场景性能活跃度Spring Boot 3.x 默认
1Jackson企业级、复杂对象、Spring全家桶★★★★★★★★★★
2Fastjson2追求极致性能、对安全性要求不高场景★★★★★★★★★☆
3GsonAndroid、轻量简单场景★★★★☆★★★★☆
4JSON-B纯Jakarta EE 项目、标准★★★☆☆★★★☆☆部分

1. 最推荐的现代依赖(2025-2026主流写法)

<!-- Jackson(强烈推荐) --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.17.2</version><!-- 或更新版本 --></dependency><!-- 如果需要JDK17+记录类、虚拟记录等支持 --><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jdk17</artifactId><version>2.17.2</version></dependency><!-- Fastjson2(性能党选择) --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.50</version><!-- 关注安全公告 --></dependency><!-- Gson(轻量选择) --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.11.0</version></dependency>

2. 最高频实用技巧清单(带代码)

技巧1:优雅处理 LocalDateTime / Instant(最痛点之一)
// Jackson 推荐写法(全局配置一次即可)ObjectMappermapper=JsonMapper.builder().addModule(newJavaTimeModule())// 支持 java.time.*.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).build();// 或使用注解(更精细控制)publicclassOrder{@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")privateLocalDateTimecreateTime;@JsonFormat(pattern="yyyy-MM-dd")privateLocalDatedeliveryDate;}

Fastjson2 等价写法:

JSONWriter.Feature.WriteDateUseDateFormat,JSONWriter.Feature.WriteLocalDateTimeAsString
技巧2:忽略 null 值 & 空集合(减小报文体积)
// Jacksonmapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);// null不输出mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);// 空集合/空串不输出// 字段级别@JsonInclude(JsonInclude.Include.NON_NULL)privateStringremark;
技巧3:字段名风格自动转换(最常用场景)
// Jackson - snake_case ↔ camelCasemapper.registerModule(newSimpleModule().addSerializer(String.class,newPropertyNamingStrategies.SnakeCaseStrategy()...));// 或全局配置(Spring Boot常用)@BeanpublicObjectMapperobjectMapper(){returnJsonMapper.builder().propertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE).build();}
技巧4:处理未知字段不报错(向前兼容神器)
// Jacksonmapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);// Fastjson2JSONReader.Feature.IgnoreAutoTypeNotMatch,JSONReader.Feature.ErrorOnUnknown
技巧5:泛型集合反序列化(最容易出错的地方)
// Jackson 推荐写法List<User>users=mapper.readValue(json,mapper.getTypeFactory().constructCollectionType(List.class,User.class));// 更复杂的嵌套泛型Map<String,List<User>>data=mapper.readValue(json,newTypeReference<>(){});

Gson 等价:

Typetype=newTypeToken<List<User>>(){}.getType();List<User>users=gson.fromJson(json,type);
技巧6:超大 JSON → 流式处理(内存杀手克星)
// Jackson 流式读取(推荐)try(JsonParserparser=mapper.createParser(hugeJsonInputStream)){while(parser.nextToken()!=null){if(parser.currentToken()==JsonToken.FIELD_NAME){Stringfield=parser.getCurrentName();if("orders".equals(field)){parser.nextToken();// 进入数组while(parser.nextToken()!=JsonToken.END_ARRAY){Orderorder=mapper.readValue(parser,Order.class);// 逐条处理}}}}}
技巧7:JSON Patch / JSON Merge Patch(声明式修改)
// Jackson 支持 RFC 6902JsonNodepatchNode=mapper.readTree(patchJson);ObjectMappermapperWithPatch=JsonMapper.builder().build();JsonNodetarget=mapperWithPatch.readerFor(User.class).with(newJsonPatch(patchNode)).readValue(originalUserJson);
技巧8:快速脱敏 / 过滤敏感字段(合规必备)
// Jackson 方式一:@JsonFilter@JsonFilter("sensitiveFilter")publicclassUser{...}// 方式二:自定义 SerializerpublicclassMaskPhoneSerializerextendsStdSerializer<String>{@Overridepublicvoidserialize(Stringvalue,JsonGeneratorgen,SerializerProviderp){if(value!=null&&value.length()==11){gen.writeString(value.substring(0,3)+"****"+value.substring(7));}}}
技巧9:Fastjson2 高性能实用配置(追求极致时用)
JSONWriterjsonWriter=JSONWriter.ofUTF8().setFeatures(JSONWriter.Feature.WriteNullsAsEmptyString,JSONWriter.Feature.PrettyFormatIfLengthGt512,JSONWriter.Feature.NotWriteDefaultValue);

快速选择建议表(2026视角)

你最在意的点推荐库次选
Spring Boot 3.x 项目Jackson
最高性能Fastjson2Jackson
Android 开发GsonFastjson2
内存极度敏感 + 大JSONJackson Stream
代码最少、最简单GsonFastjson2
需要严格标准合规JSON-B / Jackson

你目前项目用的是哪个库?或者主要痛点是什么(日期、泛型、性能、内存、字段风格……)?可以讲得更具体一些,我可以给你更针对性的写法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 23:19:19

Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)

文章目录 前言一、基本功能介绍 1.1本章功能效果预览图: 二、可执行源码 2.1 yaml基础配置2.2 MybatisAnalyzeSQLInterceptor实现SQL拦截 前言 SQL性能监控是一个程序必要的功能&#xff0c;通常我们可以使用数据库自带的客户端工具进行SQL性能分析。然而对于一些专业度不高…

作者头像 李华
网站建设 2026/8/28 5:28:56

C语言第24章 多维数组入门

文章目录 第24章 多维数组入门 本章导读 24.1 二维数组的概念 一、什么是二维数组 二、二维数组的声明 三、理解"数组的数组" 24.2 二维数组的声明与初始化 一、声明方式 二、初始化注意事项 三、代码实践 24.3 二维数组的遍历 一、基本遍历方法 二、行主序 vs 列主序…

作者头像 李华
网站建设 2026/8/25 19:25:34

C语言第25章 字符数组与字符串

文章目录 第25章 字符数组与字符串 本章导读 25.1 字符数组与字符串的关系 一、字符数组 二、字符串 三、关键区别 25.2 字符串的初始化 一、初始化方法 二、初始化注意事项 25.3 字符串的输入输出 一、输出字符串 二、输入字符串 三、常见问题与注意事项 25.4 基本的字符串操作…

作者头像 李华
网站建设 2026/8/19 20:14:37

Asian Beauty Z-Image Turbo 模型解析:从计算机组成原理视角看GPU推理过程

Asian Beauty Z-Image Turbo 模型解析&#xff1a;从计算机组成原理视角看GPU推理过程 最近在部署和测试一些图像生成模型时&#xff0c;我发现很多朋友对“为什么需要这么强的显卡”、“推理时GPU到底在忙什么”这些问题感到困惑。大家可能知道模型参数大、算力要求高&#x…

作者头像 李华
网站建设 2026/8/22 7:12:19

PyTorch 2.5镜像实测:免安装免配置,快速体验GPU训练全流程

PyTorch 2.5镜像实测&#xff1a;免安装免配置&#xff0c;快速体验GPU训练全流程 1. 引言&#xff1a;告别环境配置的噩梦 如果你尝试过在本地电脑上安装PyTorch&#xff0c;大概率经历过这样的痛苦&#xff1a;Python版本不对、CUDA驱动不匹配、各种依赖库冲突&#xff0c;…

作者头像 李华
网站建设 2026/8/19 22:45:17

新手友好,快马AI生成带详解注释的dll修复工具学习项目

对于刚接触编程的朋友来说&#xff0c;听到“DLL修复”可能会觉得既神秘又复杂&#xff0c;感觉要深入到Windows系统的核心才行。确实&#xff0c;手动处理DLL文件涉及到系统API调用、注册表操作、文件权限等一系列难题&#xff0c;对新手很不友好。不过&#xff0c;学习编程的…

作者头像 李华