JSON讲解
JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级的数据交换格式,目前使用特别
广泛。
采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
对象表示为键值对,数据由逗号分隔
花括号保存对象
方括号保存数组
JSON 键值对是用来保存 JavaScript 对象的一种方式,和JavaScript 对象的写法也大同小异键/值对组合中的键名写在前面并用双引号"”包裹,使用冒号:分隔,然后紧接着值:
{"name":"QinJiang"}
{"age":"3"}
{"sex":"男"}
前后端分离时代,前端和后端的数据交互用json交换格式。
理解JSON的demo
创建一个html页面,定义一个JavaScript的对象,我们可以将这个js对象转换为json对象,也可以将json对象转换为js对象
访问这个html页面,发现json对象就是普通的字符串,js对象是可展开的。
Controller返回JSON数据
Jackson
Jackson应该是目前比较好的json解析工具了
当然工具不止这一个,比如还有阿里巴巴的 fastjson 等等。
我们这里使用Jackson,在上一篇文章环境的基础上使用它需要导入它的jar包;还有lombok依赖。
编写一个User实体类
编写一个Controller,然后在方法上加@ResponseBody注解,这样返回的内容就不会走视图解析器,而是直接返回一个字符串。
加lib,添依赖,配Tomcat
访问这个Controller方法的路由,发现返回了一个User的普通字符串,但是有乱码。
我们调用jackson的方法,新建一个ObjectMapper对象,调用这个对象的writeValueAsString的方法将我们创建的一个User对象,转换为JSON格式的字符串,并返回它。
再调用这个Conroller的方法,发现返回的是一个JSON格式的字符串,也有乱码。
JSON乱码处理
发现出现了乱码问题,我们需要设置一下他的编码格式为utf-8,以及它返回的类型。通过@RequestMaping的produces属性来实现,修改下代码
再次调用Controller的这个方法,发现乱码问题解决。
乱码统一解决
上一种方法比较麻烦,如果项目中有许多请求则每一个都要添加,可以通过Spring配置统一指定,这样就不用每次都去处理了!
我们可以在springmvc的配置文件上添加一段消息StringHttpMessageConverter转换配置!
在有映射器、适配器、视图解析器配置的那个springmvc-servlet.xml的那个配置文件中添加JSON乱码问题解决的配置。
@RequestMapping就不用加刚才的东西了
再访问,乱码问题也一样被解决。
理解Jackson的小demo
再创建一个Controller的方法,创建许多User对象,都加入到一个List集合中,我们依然调用以前的方法,可以直接将这个集合转换为JSON格式的字符串。
访问该方法,看到返回结果。
关于返回时间的格式问题
新建一个时间对象,用ObjectMapper对象转换为JSON对象返回,默认为时间戳格式
显示出来是时间戳格式,不好理解。
设置一个SimpleDateFormat的对象,定义时间格式为"yyyy-MM-dd HH:mm:ss,再转化为JSON对象时,先用这个对象的format方法嵌套一层再转换。
这种时间格式返回更加清晰易懂。
还有另外一种该法。让ObjectMapper对象的默认把时间转换成时间戳的方式关闭,然后自定义一个日期的格式SimpleDateFormat对象,设置日期格式,将ObjectMapper对象通过setDateFormat方法设置它的日期转换格式,然后正常调用这个对象的转换JSON方法,加入日期对象即可。
我们把这个转换JSON的操作定义成一个JsonUtils方法类,方便我们后续使用
再需要将对象转换成JSON字符串时,调用这个工具类即可。
FastJson
fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。实现json的转换方法很多,最后的实现结果都是一样的。
导入fastjson的依赖
它的各种方法。