Java框架之SpringMVC(三)Json的使⽤、Json的乱码处理、关闭时间戳JSON
什么是JSON?
什么是JSON?
JSON(JavaScript Object Notation, JS 对象标记) 是⼀种轻量级的数据交换格式,⽬前使⽤特别⼴泛。
采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语⾔。 易于⼈阅读和编写,同时也易于机器解析和⽣成,并有效地提升⽹络传输效率。
在 JS 语⾔中,⼀切都是对象。因此,任何JS⽀持的类型都可以通过 JSON 来表⽰,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
对象表⽰为键值对
数据由逗号分隔
花括号保存对象
⽅括号保存数组
JSON 键值对是⽤来保存 JS 对象的⼀种⽅式,和 JS 对象的写法也⼤同⼩异,键/值对组合中的键名写在前⾯并⽤双引号 “” 包裹,使⽤冒号 : 分隔,然后紧接着值:
{"name": "QinJiang"}
{"age": "3"}
{"sex": "男"}
很多⼈搞不清楚 JSON 和 Js 对象的关系,甚⾄连谁是谁都不清楚。其实,可以这么理解:
JSON 是 JS 对象的字符串表⽰法,它使⽤⽂本表⽰⼀个 JS 对象的信息,本质是⼀个字符串。
var obj = {a: 'Hello', b: 'World'}; //这是⼀个对象,注意键名也是可以使⽤引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是⼀个 JSON 字符串,本质是⼀个字符串
JSON 和 JS 对象互转
要实现从JSON字符串转换为JS对象,使⽤ JSON.parse() ⽅法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
要实现从JS对象转换为JSON字符串,使⽤ JSON.stringify() ⽅法:
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
我们去代码中测试下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON_秦疆</title>
</head>
<body>
<script type="text/javascript">
/
/编写⼀个js的对象
var user = {
name:"秦疆",
age:3,
sex:"男"
};
//将js对象转换成json字符串
var str = JSON.stringify(user);
console.log(str);
//将json字符串转换为js对象
var user2 = JSON.parse(str);
console.log(user2.age,user2.name,user2.sex);
</script>
</body>
</html>
结果:
使⽤Controller实现返回JSON数据
Jackson应该是⽬前⽐较好的json解析⼯具了,当然⼯具不⽌这⼀个,⽐如还有阿⾥巴巴的fastjson等等。
我们这⾥使⽤Jackson,使⽤它需要导⼊它的jar包;
<!-- mvnrepository/artifact/com./jackson-core -->
<dependency>
<groupId>com.</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
我们随便编写⼀个User的实体类,然后我们去编写我们的测试Controller;这⾥我们需要两个新东西,⼀个是@ResponseBody,⼀个是ObjectMapper对象,我们看下具体的⽤法
package ller;
import com.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kuang.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@RequestMapping("/json1")
@ResponseBody
public String json1() throws JsonProcessingException {
//创建⼀个jackson的对象映射器,⽤来解析数据
ObjectMapper mapper = new ObjectMapper();
/
/创建⼀个对象
User user = new User("秦疆1号", 3, "男");
//将我们的对象解析成为json格式
String str = mapper.writeValueAsString(user);
return str; //由于@ResponseBody注解,这⾥会将str转成json格式返回;⼗分⽅便
}
}
运⾏结果:
Json乱码处理
⽅法⼀:
单次解决⽅法
可以看到出现了乱码问题:
我们需要设置⼀下他的编码格式为utf-8,以及它返回的类型;通过@RequestMaping的produces属性来实现,修改下代码
//produces:指定响应体返回类型和编码
@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")
再次运⾏:
⽅法⼆
⼀劳永逸⽅法
上⼀种⽅法⽐较⿇烦,如果项⽬中有许多请求则每⼀个都要添加,可以通过Spring配置统⼀指定,这样就不⽤每次都去处理了!
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.verter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.verter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.verter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
测试下:
@RequestMapping(value = "/json3")
@ResponseBody
public String json3() throws JsonProcessingException {
List<User> list = new ArrayList<>();
User user1 = new User("秦疆1号",1,"男");
User user2 = new User("秦疆2号",1,"男");
User user3 = new User("秦疆3号",1,"男");
json转换对象User user4 = new User("秦疆4号",1,"男");
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
return new ObjectMapper().writeValueAsString(list);
}
结果:
我们可以看到乱码完美解决了
项⽬案例实现
项⽬结构:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <parent>
<artifactId>SpringMVC</artifactId>
<groupId>com.kuang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论