Json基础--FastJson常用几个方法和枚举类
在JS中,一切都是对象.因此,任何支持的类型都可以通过JSON来表示,例如:字符串,数字,对象,数组等.
下面是JS的要求和语法格式:
-
对象表示为键值对
-
数据又逗号分割
-
花括号保存对象
-
方括号保存数组
JSON键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键值对组合中的键名写在前面,值用双引号""包裹,使用冒号:分割,然后紧接着值:
{"name": "小明"} {"age": "15"} {"sex": "男"}
JSON与js对象的关系,可以这么理解:
JSON是JS对象的字符串表示法,他使用文本表示一个JS对象的信息,本质是一个字符串.
var obj = {"name":'xiaohong',age:"18"}; //这是一个对象,注意键名也是可以使用引号包裹的 var json = {"a":"小红","age":"18"}; //这是一个JSON字符串,本质是一个字符串
JSON 和 JS 对象转换
要实现从JSON字符串转为JS对象,使用JSON.parse()方法;
var obj = JSON.parse("name":"xiaohong","age":"18"); //结果是{name:'xiaohong',age:'18'}
要实现从JS对象转为JSON字符串,使用JSON.parse()方法;
var json = JSON.stringify(name:'xiaohong',age:'18');//结果是'{"name":"xiaohong","age":"18"}'
代码
//编写一个对象 var userName ={ a : "小红", b : "小黄", c : "小兰" } //输出这个JS对象 console.log(userName); //将js对象转换为json字符串 var json = JSON.stringify(userName); console.log(json) //将json字符串转换为js对象 var jsDx = JSON.parse(json); console.log(jsDx)
处理乱码,在Spring-Mvc配置文件中
<!-- 开启注解 --> <mvc:annotation-driven > <!--JSON格式化乱码处理方式--> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="failOnEmptyBeans" value="false"/> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
JAVA :FASTTJSON
FastJson序列化API
序列化:是指将Java对象转成json格式字符串的过程,JavaBean对象,List集合对象,Map集合,为应用最为广泛:
-
JSON.toJSONString
-
序列化对象
-
/** *java中的对象,Student对象,序列化为JSON格式字符串 * **/ @RequestMapping("/demo1") @ResponseBody public String toObjectToJson(){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String date = simpleDateFormat.format(new Date()); Student student = new Student(); student.setAge(22); student.setBirthday(date); student.setEmail("2409956979@qq.com"); student.setId(10001); student.setName("小米"); //sutdent对象,转JSON格式字符串 Map<String,Object> mapData = new HashMap<>(); mapData.put("message","成功"); mapData.put("data",student); mapData.put("errCode","0"); //调用FastJson的静态方法,转换json字符串 String jsonString = JSON.toJSONString(mapData); return jsonString; }
-
将list集合序列化为JSon字符串,转换后为数组格式
-
public List<Student> xsData(){ List<Student> list = new ArrayList<>(); Student student = new Student(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String date = simpleDateFormat.format(new Date()); student.setAge(43); student.setBirthday(date); student.setEmail("2409956979@qq.com"); student.setId(10001); student.setName("小将"); student.setAge(24); student.setBirthday(date); student.setEmail("2409956979@qq.com"); student.setId(10002); student.setName("小蓝"); student.setAge(22); student.setBirthday(date); student.setEmail("2409956979@qq.com"); student.setId(10003); student.setName("小西"); list.add(student); return list; } /** *java中的对象,List象,序列化为JSON格式字符串 * **/ @RequestMapping("/demo2") @ResponseBody public String toListToJson(){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String date = simpleDateFormat.format(new Date()); Student student = new Student(); student.setAge(22); student.setBirthday(date); student.setEmail("2409956979@qq.com"); student.setId(10001); student.setName("小米"); //sutdent对象,转JSON格式字符串 List<Student> list = xsData(); list.add(student); Map<String,Object> mapData = new HashMap<>(); mapData.put("message","成功"); mapData.put("data",list); mapData.put("errCode","0"); //调用FastJson的静态方法,转换json字符串 String jsonString = JSON.toJSONString(mapData); return jsonString; }
-
JSON格式字符串,反序列化为Java对象
/** * JSON字符串,反序列化为Java对象 */ @RequestMapping("/jsonZHStudent") public @ResponseBody Student toJsontoObject(){ String json = "{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10001,\"name\":\"小米\"}"; //fastJson类的静态方法parseObject //传递要反序列化的json字符串,传递JAVA的class对像 Student student = JSON.parseObject(json, Student.class); return student; } /** * JSON字符串,反序列化为List集合 */ @RequestMapping("/jsonZHList") public @ResponseBody List<Student> toJsontoList(){ String json = "[{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10003,\"name\":\"小西\"},{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10001,\"name\":\"小米\"}]"; //fastJson类的静态方法parseObject //传递要反序列化的json字符串,传递转换后的集合的泛型的class对象 List<Student> student = JSON.parseArray(json, Student.class); return student; } /** * JSON字符串,反序列化为Map集合 */ @RequestMapping("/jsonZHMap") public @ResponseBody Map toJsontoMap(){ String json = "{\"student1\":{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10003,\"name\":\"小西\"},\"student2\":{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10001,\"name\":\"小米\"}}"; //fastJson类的静态方法parseObject //传递要反序列化的json字符串,Map集合没有泛型,没有泛型是不安全的集合 //转换后的集合,必须要有泛型 //Map student = JSON.parseObject(json); //调用parseObject传递参数,TypeReference<>类型,TypeReference类的泛型中,传递转换后的Map集合 //new TypeReference<Map<String, Student>>() { } 匿名内部类 Map<String, Student> stringStudentMap = JSON.parseObject(json, new TypeReference<Map<String, Student>>() { }); return stringStudentMap; }
-
-
SerializerFeature枚举
该枚举支持序列化为null的字段
-
枚举常量WriteMapNullValue序列化为null的字段
@Test public void testWriteMapNullValue(){ Student student = new Student(); student.setAge(22); student.setBirthday(cshDate()); student.setId(10001); student.setName("小米"); // student.setEmail("2409956979@qq.com"); //方法的参数上,添加枚举类型,未赋值的就为null String s = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue); System.out.println(s); }
-
枚举常量WriteNullStringAsEmpty字段为null,序列化为“”(空字符)
@Test public void testWriteNullStringAsEmpty(){ Student student = new Student(); student.setAge(22); student.setBirthday(cshDate()); student.setId(10001); student.setName("小米"); // student.setEmail("2409956979@qq.com"); //方法的参数上,添加枚举类型,未赋值的就为null String s = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty); System.out.println(s); }
/** * WriteNullNumberAsZero 当字段为null时,序列化为0 */ @Test public void WriteNullNumberAsZero(){ Student student = new Student(); // student.setAge(22); student.setBirthday(cshDate()); student.setId(10001); student.setName("小米"); student.setEmail("2409956979@qq.com"); //方法的参数上,添加枚举类型,未赋值的就为null String s = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero); System.out.println(s); }
-
枚举常量WriteNullBooleanAsFalse字段为null,输出false,(字段类型为Boolean)
-
枚举常量WriteDateUseDateFormat格式化日期格式,(字段类型为Date)
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!