阿里fastjson使用笔记,parseObject问题,输出下划线格式,json格式化等,不打印base64等
文章目录maven引入JSONField首字母大写的序列化默认驼峰自动序列化拓展: JSON.parseObject一个空对象会报错吗?如果是Resource资源使用Json序列化容易有问题parseObject遇到的问题输出下划线格式json打印设置输出空字符串参数含义CustomJsonUtilsfastjson2其他controller初始化的时候可以设置本类的json接收?(待办)不打印base64file等为什么有的类打印时不用JSON.toJSONString()报错 JSON parse error: Can not deserialize instance of java.util.ArrayList out of START_OBJECT tokenorg.json报错 java.lang.NoSuchMethodError: org.json.JSONObject.init(Ljava/lang/Object;)Vjson工具中fastjson是主流中的一种。maven引入pom.xml中添加dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.58/version/dependency代码publicclassJsonTest{publicstaticvoidmain(String[]args){MapInteger,ObjectmapnewHashMapInteger,Object();ArrayListPersonlistnewArrayListPerson();PersonpersonnewJsonTest().newPerson();Personperson2newJsonTest().newPerson();person.setName(张飞);person.setAge(28);person2.setName(guanyu);person2.setAge(30);list.add(person);list.add(person2);map.put(1,String1);map.put(2,String2);map.put(3,list);StringjsonStringJSON.toJSONString(map);System.out.println(jsonString);JSONObjectjsonObjectJSON.parseObject(jsonString);Stringstring1jsonObject.getString(1);Stringstring2jsonObject.getString(2);JSONArraylist1jsonObject.getJSONArray(3);System.out.println(list1);System.out.println(list1.get(0));}classPerson{privateStringname;privateStringage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.namename;}publicStringgetAge(){returnage;}publicvoidsetAge(Stringage){this.ageage;}}}**对象 jsonString **JSON.toJSONString(map);**jsonString obj **JSON.parseObject(jsonString);当然也可以转换为某个类的对象代码DataEntitypublicclassPerson{privatestaticfinalLoggerloggerLoggerFactory.getLogger(Person.class);IdprivateLongid;privateStringname;publicstaticvoidmain(String[]args){PersonpersonnewPerson();person.setId(159L);person.setName(chushiyun);StringsJSON.toJSONString(person);logger.info(json 字符串是{},s);Personperson1JSON.parseObject(s,Person.class);logger.info(person1.toString());}}JSONField如果字段有不一致的时候那么可以加JSONField注解,序列化和解析的时候就会按照这个字段来解析如代码DataEntitypublicclassPersonManage{IdprivateLongid;JSONField(namename)privateStringmanageName;}首字母大写的序列化有历史需求很变态报文首字母大写。找不准到底是哪种json解析器简单点就直接首字母改为大写也直接可以序列化了。默认驼峰自动序列化可以不加注解吗?可以如果属性命名是驼峰形式且完全匹配那么不加注解也能序列化成功。拓展: JSON.parseObject一个空对象会报错吗?好问题一起来看一下。JSON.parseObject一个空对象会报错吗?(null);不会。但是要注意返回的是个null对象如果继续调用方法会报错。用代码验证下// 这句不会报错JSONObjectjsonObjectJSON.parseObject(null);// 这句会报错// 因为之前返回的JsonObject是null调用任何方法都会报错StringstringjsonObject.getString(username);如果是Resource资源使用Json序列化容易有问题序列化之后发现文件变成非正常文件了。代码PathpathPaths.get(d:\\,filename);ResourceresourceresourceLoader.getResource(file:path.toString());logger.info(resource{},JSON.toJSONString(resource));// 都是这句json惹的祸页面输出不了目前还不知道原理总之在序列化Resource资源的时候要小心。parseObject遇到的问题解析复杂对象的时候直接使用parseObject会有问题要用这种解析方式JsonResultMultiModelredisJsonResultJSON.parseObject(jsonString,newTypeReferenceJsonResultMultiModel(){});输出下划线格式标准产品是下划线格式日志也打印为下划线格式直接就能复用否则还需要转您换。publicstaticvoidmain(String[]args){SerializeConfigserializeConfignewSerializeConfig();serializeConfig.propertyNamingStrategyPropertyNamingStrategy.SnakeCase;UserusernewUser();user.setUsername(asdfad);log.info(JSON.toJSONString(user,serializeConfig));}发现果然是下划线格式了。json打印设置输出空字符串默认是不打印空字符串的但是有时需要打印例如写接口文档打印出来空值比较方便。代码SerializeConfigconfignewSerializeConfig();UserRequestrequestnewUserRequest();StringcontentJSON.toJSONString(request,config,SerializerFeature.WriteNullNumberAsZero,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.WriteNullBooleanAsFalse);log.info(content);那么list呢?实际如果list为空即使做了如上设置也是打印不出来的。解决方案1、list中添加一个有值对象。实际上写接口文档时list中的类单独打印出来也是可以的。参数含义// 定义一套针对 null 值的默认值序列化特性// 1. WriteNullNumberAsZero: 当数字类型如 Integer, Long, Double为 null 时强制输出为 0// 2. WriteNullListAsEmpty: 当集合类型如 List, Set为 null 时强制输出为 []空数组// 3. WriteNullStringAsEmpty: 当字符串类型String为 null 时强制输出为 空字符串// 4. WriteNullBooleanAsFalse: 当布尔类型Boolean为 null 时强制输出为 falseprivatestaticfinalSerializerFeature[]NULL_DEFAULT_FEATURES{SerializerFeature.WriteNullNumberAsZero,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.WriteNullBooleanAsFalse};CustomJsonUtilspublicclassCustomJsonUtils{// 定义一套标准的序列化特性全局统一使用// 1. WriteNonStringKeyAsString: 强制把非字符串的 Key如 Long转成带双引号的字符串// 2. WriteMapNullValue: 如果值为 null也保留该字段输出 key:null而不是直接忽略// 3. DisableCircularReferenceDetect: 关闭循环引用检测防止出现 $ref 这种奇怪的符号privatestaticfinalSerializerFeature[]FEATURES{SerializerFeature.WriteNonStringKeyAsString,SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect};publicstaticStringtoJsonString(Objectobject){StringsJSON.toJSONString(object,FEATURES);returns;}}fastjson2对比fastjson性能更快安全性更高推荐使用。其他controller初始化的时候可以设置本类的json接收?(待办)不打印base64file等base64太长打印非常影响查日志而且没什么实际意义。file则是不好打印。所以打印日志时最好去掉这两种。json自带这种机制配置下即可。代码是网上通用的代码publicstaticSimplePropertyPreFilterfilePropertyPreFilternull;static{filePropertyPreFilternewSimplePropertyPreFilter();filePropertyPreFilter.getExcludes().add(file);filePropertyPreFilter.getExcludes().add(base64String);}JSON.toJSONString(request,CustomJsonUtils.filePropertyPreFilter);这里是根据属性名进行过滤。为什么有的类打印时不用JSON.toJSONString()很简单继承一个类抽象类。重写toString()方法return JSON.toJSONString(this);报错 JSON parse error: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token报错信息为JSON parse error: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token问题原因这是因为 userList 是个list报文写错了用的大括号。其实应该是 []。org.json报错 java.lang.NoSuchMethodError: org.json.JSONObject.(Ljava/lang/Object;)V刚看到了也是一脸蒙本地调试是可以的。1、版本不对。2、构造器不支持。即 虽然对象为Object但是实际只支持几种固定的入参类型。// 正确使用方式JSONObjectobj1newJSONObject({\key\:\value\});// StringJSONObjectobj2newJSONObject(newHashMapString,Object());// MapJSONObjectobj3newJSONObject();// 无参构造// 可能导致问题的调用某些版本不支持ObjectsomeObjectgetObject();JSONObjectobjnewJSONObject(someObject);// 可能不存在实测确实如此例如可以接收json字符串但是传了个jsonObject就会报如上错误。扩展一下如果传的是个数组格式的json字符串但是用jsonObject封装的也会报错。总之org.json是个轻量级的json简便但是用起来比较容易报错。

相关新闻

深入理解Spark

深入理解Spark

文章目录 1、Spark 是什么? 2、Spark 运行模式 3、适合Spark的场景 4、Spark相关术语 5、Spark程序执行流程 6、理解Spark Stage的划分 6.1 Spark Stage的划分 6.2 Spark DAG的可视化 7、Spark调度过程 7.1 Spark的两级调度模型 7.2 以Spark On Yarn说明调度过程 小结 在前面博…

2026/7/28 11:36:14阅读更多 →
Zotero插件市场:插件生态系统的革命性集成解决方案

Zotero插件市场:插件生态系统的革命性集成解决方案

Zotero插件市场:插件生态系统的革命性集成解决方案 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing and installing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons Zotero插件市场是…

2026/7/28 11:36:14阅读更多 →
AI大模型在电商商品发布系统的应用与实践

AI大模型在电商商品发布系统的应用与实践

1. 项目概述:AI大模型驱动的智能商品发布系统 这个项目本质上是在解决电商领域的一个核心痛点——商品信息发布的效率与质量问题。传统商品发布流程通常需要运营人员手动填写大量字段、上传图片、编写描述,不仅耗时耗力,而且容易产生信息不一…

2026/7/28 11:34:14阅读更多 →
NBM5100A电池增强器与TM4C1294微控制器优化物联网设备电源管理

NBM5100A电池增强器与TM4C1294微控制器优化物联网设备电源管理

1. 项目背景与核心需求解析在物联网设备和小型便携式电子产品设计中,纽扣电池(如CR2032)和锂亚硫酰氯(Li-SOCl2)电池因其体积小、能量密度高的特性被广泛应用。然而这类电池存在两个固有缺陷:一是脉冲放电能…

2026/7/28 13:04:35阅读更多 →
物联网设备电源管理:NBM7100A与STM32L021K4的优化方案

物联网设备电源管理:NBM7100A与STM32L021K4的优化方案

1. 项目背景与核心挑战在物联网设备和可穿戴设备的设计中,电源管理始终是一个关键痛点。特别是使用不可充电的纽扣电池(如CR2032)供电时,工程师们经常面临两个相互矛盾的性能指标:设备需要支持瞬时高电流脉冲&#xff…

2026/7/28 13:04:35阅读更多 →
Meta“西瓜”模型追平GPT-5.5:AI大模型竞争进入工程化新阶段

Meta“西瓜”模型追平GPT-5.5:AI大模型竞争进入工程化新阶段

上周,当我在调试一个代码生成任务时,偶然发现了一个有趣的现象:同样的提示词,在 GPT-5.5 和 Meta 最新的内部模型上,输出的质量差异已经微乎其微。这让我意识到,AI 模型竞争的格局可能正在发生一些微妙但重…

2026/7/28 13:04:35阅读更多 →
基于Dify平台的OKR智能校对系统开发实践

基于Dify平台的OKR智能校对系统开发实践

## 1. 项目概述:当OKR遇上AI校对最近在团队内部推行OKR时发现一个痛点:很多同事写出来的目标要么不可衡量,要么关键结果(KR)与目标(O)脱节。传统的人工校对方式效率低下,于是我用Dif…

2026/7/28 13:04:35阅读更多 →
Palworld存档转换终极指南:轻松管理游戏进度的完整教程

Palworld存档转换终极指南:轻松管理游戏进度的完整教程

Palworld存档转换终极指南:轻松管理游戏进度的完整教程 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要备份Palworld游…

2026/7/28 13:04:35阅读更多 →
Windows开发实战:从系统优势到Redis、Docker环境配置全指南

Windows开发实战:从系统优势到Redis、Docker环境配置全指南

从桌面办公到游戏娱乐,再到企业级服务器和开发者工作站,Windows 操作系统几乎无处不在。无论是刚接触电脑的新手,还是需要部署复杂服务的资深开发者,都绕不开与 Windows 的交互。然而,在日常使用和开发过程中&#xff…

2026/7/28 13:02:34阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →