义乌市做网站,wordpress批量目录,免费软件app,joomla网站模板一、Java中json字符串与json对象
1、json本质
json是一种数据交换格式。
常说的json格式的字符串 发送和接收时都只是一个字符串#xff0c;它遵循json这种格式。
2、前后端交互传输的json是什么#xff1f;
前后端交互传输的json都是json字符串
比如#xff1a;…一、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){ListCallBackResponseDto list JSONObject.parseArray(string, CallBackResponseDto.class);return ResultInfo.success();
}//或者如下用object接收
PostMapping(/controlResponse)
public ResultInfo callBackResponse(RequestBody Object object) throws Exception {ListCallBackResponseDto 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 {ListCallBackResponseDto 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(nameuser_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时碰到的那些首字母大小写转换的坑 - 简书