当前位置: 首页 > news >正文

Java中json的一点理解

一、Java中json字符串与json对象

1、json本质

json是一种数据交换格式。

常说的json格式的字符串 ==> 发送和接收时都只是一个字符串,它遵循json这种格式。

2、前后端交互传输的json是什么?

前后端交互传输的json都是json字符串

比如:

2.1响应过程:后端响应的实际上是json字符串(原理:Springboot中,关于为什么controller返回前端数据是json格式的思考_为什么我返回result中有一个对象,能返回成json-CSDN博客),前端axios接收的也是字符串,只不过自动帮我们转成了json对象。

2.2请求过程:前端传输的实际上也是json字符串,由后端的Jackson帮我们转成了对应的对象。

3、前端向后端传递json需要注意的点

3.1前端传过来的若是字符串格式的json字符串,则用JSONObject.parseArray()或者JSONObject.parseObject()转换。示例:
 前端传值:

 后端接收:

@PostMapping("/controlResponse")
public Result callBackResponse(@RequestBody String string){List<CallBackResponseDto> list= JSONObject.parseArray(string, CallBackResponseDto.class);return ResultInfo.success();
}//或者如下用object接收
@PostMapping("/controlResponse")
public ResultInfo callBackResponse(@RequestBody Object object) throws Exception {List<CallBackResponseDto> list = JSONObject.parseArray(object.toString(), CallBackResponseDto.class);return ResultInfo.success();
}

3.2若前端传过来的是对象格式的json字符串,则要先用JSON.toJSONString()将object转成字符串,然后用JSONObject.parseArray()或者JSONObject.parseObject()转换。示例:

前端传值:

 后端接收:

@PostMapping("/controlResponse")
public ResultInfo callBackResponse(@RequestBody Object object) throws Exception {List<CallBackResponseDto> list = JSONObject.parseArray(JSON.toJSONString(object), CallBackResponseDto.class);return ResultInfo.success();
}

 二、fastjson中遇到的问题

1、FastJson下划线转驼峰

1.1 parseObject(字符串转对象)的时候 设置下划线转驼峰

ParserConfig.getGlobalInstance().propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
JSON.parseObject(str, RespOrderDTO.class);

1.2 toJSONString(对象转字符串)的时候,设置驼峰转下划线

SerializeConfig config = new SerializeConfig();
config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
String json = JSON.toJSONString(user, config);

1.3 单个字段 设置下划线转驼峰

@JSONField(name="user_name")
private String userName;

注意:fastjson会反序列化时会智能匹配,fastjson2不会智能匹配

fastjson 2 大小写以及下划线问题_问答-阿里云开发者社区

Java中@JSONField和@JsonProperty注解的用法及区别详解_java_脚本之家

 2、Fastjson首字母大小写问题

 2.1、问题

使用Fastjson转json之后发现首字母小写。实体类如下:

@Data
public class DataIdentity {private String BYDBSM;private String SNWRSSJSJ;private Integer CJFS = 20;
}

测试代码如下:

public static void main(String[] args) {DataIdentity dataIdentity = new DataIdentity();dataIdentity.setBYDBSM("xxx");dataIdentity.setSNWRSSJSJ(DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss"));String str = JSON.toJSONString(dataIdentity);System.out.println(str);
}

测试结果如下:

2.2、分析

通过查看Fastjson源码可知,Fatjson在序列化对象时,会判断compatibleWithJavaBean,如果为false则将首字母小写,compatibleWithJavaBean默认值为false.

public class TypeUtils {private static final Pattern NUMBER_WITH_TRAILING_ZEROS_PATTERN = Pattern.compile("\\.0*$");public static boolean compatibleWithJavaBean = false;public static boolean compatibleWithFieldName = false;
...
}
...
if (Character.isUpperCase(c2)) {if (compatibleWithJavaBean) {propertyName = decapitalize(methodName.substring(2));} else {propertyName = Character.toLowerCase(methodName.charAt(2)) + methodName.substring(3);}
propertyName = getPropertyNameByCompatibleFieldName(fieldCacheMap, methodName, propertyName, 2);
...

2.3、解决方案

1.compatibleWithJavaBean设置为true

TypeUtils.compatibleWithJavaBean = true;

也可以通过设置jvm参数。

2.@JSONField注解

@Data
public class DataIdentity {@JSONField(name = "BYDBSM")private String BYDBSM;@JSONField(name = "SNWRSSJSJ")private String SNWRSSJSJ;@JSONField(name = "CJFS")private Integer CJFS = 20;}

3、使用hutool的JSONUtil.toJsonStr()方法

String str = JSONUtil.toJsonStr(yytStuCountDto);

2.4、参考文章

Fastjson首字母大小写问题_fastjson 首字母小写-CSDN博客

BUG实录 | 第一篇:FastJSON转换Oracle字段成实体后首字母小写问题 - 有来技术 - 博客园

fastjson转换json时,碰到的那些首字母大小写转换的坑! - 简书

相关文章:

Java中json的一点理解

一、Java中json字符串与json对象 1、json本质 json是一种数据交换格式。 常说的json格式的字符串 > 发送和接收时都只是一个字符串&#xff0c;它遵循json这种格式。 2、前后端交互传输的json是什么&#xff1f; 前后端交互传输的json都是json字符串 比如&#xff1a;…...

Vue项目搭建教程超详细

目录 一. 环境准备 1. 安装node.js 2. 安装Vue cli 二. 创建 Vue 2 项目 1. 命令行方式 2. vue ui方式 一. 环境准备 1. 安装node.js 可参考node.js卸载与安装超详细教程-CSDN博客 2. 安装Vue cli npm install -g vue/cli检查是否安装成功 vue --version Vue CLI …...

2025年01月蓝桥杯Scratch1月stema选拔赛真题—美丽的图形

美丽的图形 编程实现美丽的图形具体要求: 1)点击绿旗&#xff0c;角色在舞台中心&#xff0c;如图所示&#xff1b; 2)1秒后&#xff0c;绘制一个边长为 140的红色大正方形&#xff0c;线条粗细为 3&#xff0c;正方形的中心为舞台中心&#xff0c;如图所示; 完整题目可点击下…...

【React】插槽渲染机制

目录 通过 children 属性结合条件渲染通过 children 和 slot 属性实现具名插槽通过 props 实现具名插槽 在 React 中&#xff0c;并没有直接类似于 Vue 中的“插槽”机制&#xff08;slot&#xff09;。但是&#xff0c;React 可以通过 props和 children 来实现类似插槽的功能…...

计算机网络 | 什么是公网、私网、NAT?

关注&#xff1a;CodingTechWork 引言 计算机网络是现代信息社会的基石&#xff0c;而网络通信的顺畅性和安全性依赖于有效的IP地址管理和网络转换机制。在网络中&#xff0c;IP地址起到了标识设备和进行数据传输的核心作用。本文将详细讨论公网IP、私网IP以及NAT转换等网络技…...

如何解决Outlook无法连接到服务器的问题

Microsoft Outlook 是一款广泛使用的电子邮件客户端&#xff0c;它能够帮助用户高效地管理邮箱、日历和任务。然而&#xff0c;尽管其功能强大&#xff0c;用户有时会遇到“Outlook无法连接到服务器”的问题。这种问题通常会让用户无法接收或发送电子邮件&#xff0c;甚至可能导…...

vue2 web 多标签输入框 elinput是否当前焦点

又来分享一点点工作积累及解决方案 产品中需要用户输入一些文字后按下回车键生成标签来显示在页面上&#xff0c;经过尝试与改造完成如下&#xff1a; <template><div class"tags-view" click"beginInput"><el-tag :key"index" …...

32单片机综合应用案例——物联网(IoT)环境监测站(四)(内附详细代码讲解!!!)

无论你身处何种困境&#xff0c;都要坚持下去&#xff0c;因为勇气和毅力是成功的基石。不要害怕失败&#xff0c;因为失败并不代表终结&#xff0c;而是为了成长和进步。相信自己的能力&#xff0c;相信自己的潜力&#xff0c;相信自己可以克服一切困难。成功需要付出努力和坚…...

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式&#xff08;如 WPS 文档或表格&#xff09;。然而&#xff0c;可以通过几种间接的方式实现这一目标&#xff0c;确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案&#xff1a; ​ 导出…...

小结: 路由协议的演进和分类

路由协议的演进和分类&#xff0c;包括其发展历史及主要应用场景。路由协议用于在网络中确定数据传输的最佳路径&#xff0c;主要分为内部网关协议&#xff08;IGP&#xff09;和外部网关协议&#xff08;EGP&#xff09; AS-AS 之间的。 路由协议的演进 1982年&#xff1a;出…...

OpenCV相机标定与3D重建(60)用于立体校正的函数stereoRectify()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 为已校准的立体相机的每个头计算校正变换。 cv::stereoRectify 是 OpenCV 中用于立体校正的函数&#xff0c;它基于已知的相机参数和相对位置&am…...

Android wifi列表中去自身的热点

Android wifi列表中去自身的热点 一、前言 Android wifi列表中能搜索到自身的热点wifi&#xff1f; 正常手机上都不会出现这个问题&#xff1b;可能是系统底层已经做了过滤处理。 现实开发中Android设备的Wifi能搜索到自身热点也可能会存在。 比如基于两个单独的wifi双模组硬…...

Windows环境本地配置pyspark环境详细教程

目录 一、背景简记二、本地单机spark环境配置详细步骤第一步&#xff1a;python环境安装第二步&#xff1a;安装jdk及配置环境变量安装包下载安装环境变量配置 第三步&#xff1a;安装Spark安装包下载安装配置环境变量 第四步&#xff1a;安装hadoop安装包下载安装配置环境变量…...

《自动驾驶与机器人中的SLAM技术》ch9:自动驾驶车辆的离线地图构建

目录 1 点云建图的流程 2 前端实现 2.1 前端流程 2.2 前端结果 3 后端位姿图优化与异常值剔除 3.1 两阶段优化流程 3.2 优化结果 ① 第一阶段优化结果 ② 第二阶段优化结果 4 回环检测 4.1 回环检测流程 ① 遍历第一阶段优化轨迹中的关键帧。 ② 并发计算候选回环对…...

IP属地会随着人的移动而改变吗

在当今数字化时代&#xff0c;互联网已成为人们生活中不可或缺的一部分。无论是社交媒体的日常互动&#xff0c;还是在线购物、远程工作&#xff0c;IP地址作为网络身份的重要标识&#xff0c;扮演着举足轻重的角色。随着移动互联网技术的飞速发展&#xff0c;人们越来越多地在…...

openharmony应用开发快速入门

开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用&#xff08;如下图所示&#xff09;&#xff0c;快速了解工程目录的主要文件&#xff0c;熟悉OpenHarmony应用开发流程。 在开始之前&#xff0c;您需要了解有关OpenHarmon…...

USB3020任意波形发生器4路16位同步模拟量输出卡1MS/s频率 阿尔泰科技

信息社会的发展&#xff0c;在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息 与信号处理技术的整个面貌&#xff0c;而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关键 性、乃至决定性的作用&#xff0c;其应用已经深…...

云消息队列 Kafka 版 V3 系列荣获信通院“云原生技术创新标杆案例”

2024 年 12 月 24 日&#xff0c;由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;主办的“2025 中国信通院深度观察报告会&#xff1a;算力互联网分论坛”&#xff0c;在北京隆重召开。本次论坛以“算力互联网 新质生产力”为主题&#xff0c;全面展示中国…...

linux下的NFS和FTP部署

目录 NFS应用场景架构通信原理部署权限认证Kerberos5其他认证方式 命令serverclient查看测试系统重启后自动挂载 NFS 共享 高可用实现 FTP对比一些ftp服务器1. **vsftpd (Very Secure FTP Daemon)**2. **ProFTPD (Professional FTP Daemon)**3. **Pure-FTPd**4. **WU-FTPD (Was…...

JS Clipboard API

1.作用 在web应用程序中&#xff0c;当用户授予了相应的权限&#xff0c;Clipboard API 就能实现系统剪切板的复制、粘贴和剪切功能。系统剪切板暴露在Navigator.clipboard 中。 2.例子 window.onload () > {// 监听用户的复制事件document.addEventListener(copy, (e) …...

NOR FLASH和NAND FLASH的对比

一、擦写寿命与数据可靠性 FLASH芯片的擦写次数一般来说都是有限的&#xff0c;目前主流产品的擦写寿命普遍在10万次左右。当FLASH芯片接近使用寿命终点时&#xff0c;写操作可能会出现失败。不过&#xff0c;需要注意NAND FLASH采用整块擦写机制&#xff0c;一旦块内出现一位数…...

超越本地插件:利用快马平台ai能力全面提升你的编码效率与工作流

最近在开发前端项目时&#xff0c;我一直在寻找能提升效率的AI工具。之前用过一些本地IDE插件&#xff0c;虽然能提供基础的代码补全&#xff0c;但功能比较局限。后来尝试了InsCode(快马)平台&#xff0c;发现它把AI辅助开发做到了一个新高度&#xff0c;特别适合需要快速迭代…...

终极Windows风扇控制解决方案:FanControl如何让你的电脑既安静又高效

终极Windows风扇控制解决方案&#xff1a;FanControl如何让你的电脑既安静又高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitH…...

通过信道优化数据传输的通信链路的实现附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…...

Node.js——事件的监听与触发

事件的监听与触发1、EventEmitter对象2、添加和触发监听事件2.1、添加监听事件2.2、添加单次监听事件2.3、触发监听事件3、删除监听事件1、EventEmitter对象 在JavaScript中&#xff0c;通过事件可以处理许多用户的交互&#xff0c;比如鼠标的单击、键盘按键的按下、对鼠标移动…...

4步完成Axure本地化设置:让新手轻松上手的中文界面方案

4步完成Axure本地化设置&#xff1a;让新手轻松上手的中文界面方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...

告别ViT的笨重:手把手教你用SegFormer在Cityscapes数据集上实现高效语义分割

告别ViT的笨重&#xff1a;手把手教你用SegFormer在Cityscapes数据集上实现高效语义分割 在自动驾驶、遥感影像分析等计算机视觉应用中&#xff0c;语义分割技术扮演着关键角色。传统基于卷积神经网络&#xff08;CNN&#xff09;的方法虽然取得了显著进展&#xff0c;但面临着…...

在Jetson Orin Nano上手动编译部署AirSLAM:如何解决TensorRT模型转换(ONNX转Engine)的内存溢出问题

在Jetson Orin Nano上手动编译部署AirSLAM&#xff1a;解决TensorRT模型转换内存溢出的实战指南 1. 边缘设备部署AirSLAM的核心挑战 Jetson Orin Nano作为NVIDIA面向边缘计算推出的高性能模块&#xff0c;其4GB/8GB内存配置在运行复杂视觉SLAM算法时面临严峻的资源约束。AirSLA…...

告别数据下载烦恼:5分钟用GEE(Google Earth Engine)在线获取任意区域DEM高程数据

告别数据下载烦恼&#xff1a;5分钟用GEE在线获取任意区域DEM高程数据 在科研和工程实践中&#xff0c;数字高程模型&#xff08;DEM&#xff09;是地形分析的基础数据。传统获取方式往往需要经历数据搜索、分幅下载、格式转换、多图拼接等一系列繁琐步骤&#xff0c;对于非GI…...

Hitboxer终极指南:游戏键盘冲突一键解决,操作精度提升300%

Hitboxer终极指南&#xff1a;游戏键盘冲突一键解决&#xff0c;操作精度提升300% 【免费下载链接】socd SOCD cleaner tool for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 还在为游戏操作中的方向键冲突而烦恼吗&#xff1f;当你在激烈的对战中同…...