前后端分离时代:
后端:后端部署后端,提供接口(就是@RequestMapping("/xx/xx")里面的供前端访问后端数据的地址),提供数据
上下两者之间约定数据的传输格式:json (大多数情况下用json,也可以用对象等等)
前端:前端独立部署,负责渲染后端返回的数据
什么是JSON?
- JSON(JavaScript Object Notation JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛
- 采用完全独立于编程语言的文本格式来存储和表示数据
- 简洁和清晰的层次结构使得JSON成为理想的数据交换语言
- 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率
在JavaScript语言中,一切都是对象。因此,任何JavaScript支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。
语法格式:
- 对象表示键值对,数据由逗号隔开
- 花括号保存对象
- 方括号保存数组
前端JavaScript中JSON和JavaScript对象的互相转换
- 要实现从JSON字符串转换为JavaScript对象,使用JSON.parse()方法
var obj = JSON.parse('{"a":"Hello","b":"world"}');
//结果是{a:'Hello',b:'World'}
- 要实现JavaScript对象转换为JSON字符串,使用JSON.stringify()方法
var json = JSON.stringify({a:'Hello',b:'World'});
//结果是'{"a":"Hello","b":"World"}'
后端可以用Jackson和Fastjson对数据进行格式转换
1.Jackson的使用
项目中引入maven依赖jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
例1:
@Controller
public class UserController {
@RequestMapping(value = "/json1",produces = "application/json;charset=utf-8")
@ResponseBody//不会走视图解析器,会直接返回一个字符串
public String json1() throws JsonProcessingException {
//jackson ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user = new User(22,"土拨鼠",23);
System.out.println(user);
String str = mapper.writeValueAsString(user);
return str;
}
}
结果:
User(id=22, name=土拨鼠, age=23)===转换===》{"id":22,"name":"土拨鼠","age":23}
例2:
@Controller
public class UserController {
@RequestMapping(value = "/json2",produces = "application/json;charset=utf-8")
@ResponseBody//不会走视图解析器,会直接返回一个字符串
public String json1() throws JsonProcessingException {
//jackson ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user1 = new User(22,"土拨鼠1",23);
User user2 = new User(22,"土拨鼠2",23);
User user3 = new User(22,"土拨鼠3",23);
User user4 = new User(22,"土拨鼠4",23);
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
System.out.println(list);
String str = mapper.writeValueAsString(list);
return str;
}
}
结果:
[User(id=22, name=土拨鼠1, age=23), User(id=22, name=土拨鼠2, age=23), User(id=22, name=土拨鼠3, age=23), User(id=22, name=土拨鼠4, age=23)]=======》[{"id":22,"name":"土拨鼠1","age":23},{"id":22,"name":"土拨鼠2","age":23},{"id":22,"name":"土拨鼠3","age":23},{"id":22,"name":"土拨鼠4","age":23}]
例3:
@Controller
public class UserController {
@RequestMapping(value = "/json2",produces = "application/json;charset=utf-8")
@ResponseBody//不会走视图解析器,会直接返回一个字符串
public String json1() throws JsonProcessingException {
//jackson ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//使用ObjectMapper来格式化
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return mapper.writeValueAsString(sdf.format(date));
}
}
结果:
"2020-11-16 00:42:43"
2.FastJson的使用
fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean与json字符串的转换,实现json对象与json字符串的转换。
fastjson的pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
fastjson的三个主要的类:
【JSONObject代表json对象】
- JSONObject实现了Map接口,猜想JSONObject底层操作是由Map实现的
- JSONObject对应json对象,通过各种形式的get()方法可以获取json对象中的数据,也可以利用诸如size(),isEmpty()等方法获取“键:值”对的个数和判断是否为空。其本质是通过实现Map接口并调用接口中的方法完成的
【JSONArray代表json对象数组】
- 内部是由List接口中的方法来完成操作的
【JSON代表JSONObject和JSONArray的转化】
- 主要是实现json对象,json对象数组,javabean对象,json字符串之间的相互转化
使用:
@Controller
public class UserController {
@RequestMapping(value = "/json2",produces = "application/json;charset=utf-8")
@ResponseBody//不会走视图解析器,会直接返回一个字符串
public String json1() throws JsonProcessingException {
//创建一个对象
User user1 = new User(22,"土拨鼠1",23);
User user2 = new User(22,"土拨鼠2",23);
User user3 = new User(22,"土拨鼠3",23);
User user4 = new User(22,"土拨鼠4",23);
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
String str = JSON.toJSONString(list);
return str;
}
}
常用的也就下面几个用法: