什么是Json?
JSON:JavaScript Object Notation+JS对象
它是一种轻量级的数据交换格式JSON(当前是交互的顶流),它自身具有独立的编程格式,它的特点是简洁和清晰,Json的存在大大改造了网络传输的速率。
注意:在js中所支持的任何类型都可以通过Json来表示
Json语法格式
1:由键值对来表示对象
2:各数据之间通过逗号隔开
3:{}大括号内是对象
4:【】括号内是数组
Json与JS之间是什么关系?
学过Java的同学都知道一个方法叫做tostring,JSON与JS的关系,就可以通过这种方法来实现,
JSON就是JS对象的tostring。通过JSON来修改JS的输出内容。
JSON目前最流行的三种处理工具
1:Jackson (流行)
2:Gson
3:Fastjson (时常会出现BUG)
使用JSON前,必须先要在项目中导入JSON所使用的依赖在Maven项目的pom.xml文件中进行设置
1:Jackson
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
2:Gson
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
3:Fastjson
<dependency>
<groupId>com.alibaba/groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
JSON与JS之间相互转换的方法:
1:将JSON对象转化成JS对象
var obj = JSON.parse('{"name": "不想睡醒的梦", "sex": "男"}')
// 结果是:{name: '不想睡醒的梦', sex: '男'}
2:将JS对象转换成JSON
var json = JSON.stringify({name: '不想睡醒的梦', sex: '男'})
// 结果:'{"name": "不想睡醒梦", "sex": "男"}'
通过Jackson来实现字符格式出现乱码的情况
之前的博客有讲过当SpringMVC中出现文字输出内容乱码的情况
在Maven项目中有这样的一串代码
@RequestMapping("/book3")
@ResponseBody
public String demo3(){
return "不想睡醒的梦🐎";
}
1:通过修改参数来将乱码修改成utf-8格式
@RequestMapping(value = "/book3",produces = "application/json;charset=utf-8")
2:通过Maven项目中的SpringMVC配置文件对JSON代码进行全局文字格式的设置
注意:在配置文件中进行设置,可以一劳永逸不需要在进行其他的配置
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<!--通过json来设置文字格式一劳永逸-->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"></constructor-arg>
</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"></property>
</bean>
</property>
</bean>
</mvc:annotation-driven >
输出结果:
文字得到正常的输出,上面是JSON交互的两种方法,除此之外还有很多方法
通过JSON实现时间格式的正确表达
案例代码:访问后端数据,输出时间
@RequestMapping(value = "/date")
@ResponseBody
public Date data(){
Date date = new Date();
return date;
}
网页输出结果:一串数字
一串数字有一个官方的名称叫做时间戳
时间戳
我们想要的结果是当前的时间但是时间戳只是一串数字,对于我们并没有很大的用处
下来将通过JSON工具将时间戳转化成我们所能够理解的时间格式
一:Jackson
1:注解@JsonFormat
位置可以方法属性的上面,也可以放在生成的get方法上面
写法一:
@JsonFormat(pattern = "yyyy-MM-dd")
private Date publshdata ;
写法二:
@JsonFormat(pattern = "yyyy-MM-dd")
public Date getPublshdata() {
return publshdata;
}
输出结果
2:配置文件解决时间格式(与上面字符的配置文件大同小异)
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" id="httpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg name="pattern" value="yyyy-MM-dd"></constructor-arg>
</bean>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
3:通过ObjectMapper来实现时间格式的修改
@RequestMapping(value = "/date")
@ResponseBody
public String data() throws Exception{
ObjectMapper mapper = new ObjectMapper();
//关闭时间戳功能
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
//设置一个时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//将上面的时间格式添加到对象中
mapper.setDateFormat(sdf);
Date date = new Date();
//调用writeValueAsString,将指定的对象转换成json内容
String s = mapper.writeValueAsString(date);
return s;
}
二;Gson
注意:当你的maven项目中使用gson时,你需要将Jackson中的依赖删除掉,因为在Spring框架中,框架会优先使用Jackson的依赖,所以会优先加载Jackson依赖中的Httpmessageconvert,然后才会加载gson中的Httpmessageconvert依赖,所以两种交互依赖能同时出现,但是依赖的优先级顺序不同。
Maven项目中的配置代码:
<context:component-scan base-package="d1"></context:component-scan>
<mvc:annotation-driven >
<mvc:message-converters>
<ref bean="httpMessageConverter"></ref>
</mvc:message-converters>
</mvc:annotation-driven>
<bean class="org.springframework.http.converter.json.GsonHttpMessageConverter" id="httpMessageConverter">
<property name="gson">
<bean class="com.google.gson.Gson" factory-bean="gsonBuilder" factory-method="create"></bean>
</property>
</bean>
<bean class="com.google.gson.GsonBuilder" id="gsonBuilder">
<property name="dateFormat" value="yyyy-MM-dd"></property>
</bean>
三:Fastjson
配置文件:
<mvc:annotation-driven>
<mvc:message-converters>
<ref bean="httpMessageConverter"></ref>
</mvc:message-converters>
</mvc:annotation-driven>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" id="httpMessageConverter">
<property name="fastJsonConfig">
<bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
<property name="dateFormat" value="yyyy-MM-dd"></property>
</bean>
</property>
</bean>