JSON
:JavaScript Object Notation【JavaScript 对象表示法】
JSON 就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此 JSON 本质是字符串,主要负责在不同的语言中数据传递和交换
类似于:
JSON
和 JavaScript
没有关系,只是语法类似,JavaScript
开发者能更快的上手而已,但是他的语法本身比较简单,所以也很好学
JSON 是一个字符串,其格式非常类似于 JavaScript 对象字面量的格式。我们先来看一段 JSON 数据:
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance","Turning tiny","Radiation blast"]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch","Damage resistance","Superhuman reflexes"]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality","Heat Immunity","Inferno","Teleportation"]
}
]
}
也可以压缩表示:
{"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"]},{"name":"Madame Uppercut","age":39,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation"]}]}
Key/Value
)中,
分隔{}
表示[]
表示{}
保存的对象是一个无序的键值对集合。一个对象以左括号 {
开始,右括号 }
结束。每个“键”后跟一个冒号 :
,键值对使用逗号 ,
分隔
[]
保存的数组是值(value
)的有序集合。一个数组以左中括号 [
开始,右中括号 ]
结束。值之间使用 ,
分隔
所以,以下都是合法的 JSON 数据:
{"name": "admin", "age": 18}
["hello", 3.1415, "json"]
[{"name": "admin", "age": 18}, {"name": "root", "age": 16}, {"name": "张三", "age": 20}]
JSON
本质上是一个字符串,通过文本来存储和描述数据
Spring MVC 框架也集成了 JSON
的转换工具,我们可以直接使用,来完成 JSON
字符串和 Java 对象的互转
本质上是
jackson-databind
提供的功能,Spring MVC
框架中已经把该工具包引入了进来,我们可以直接进行使用。如果脱离了Spring MVC
使用,就需要引入相关依赖
<dependency>
<groupId>com.faster.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.5</version>
</dependency>
jackson-databind
只是其中一种import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JSONUtils {
private static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws JsonProcessingException {
Person person = new Person();
person.setId(4444);
person.setName("Yechiel");
person.setPassword("3018");
//对象转为 JSON 字符串
String jsonStr = objectMapper.writeValueAsString(person);
System.out.println(jsonStr);
//JSON 字符串转为对象
Person p = objectMapper.readValue(jsonStr,Person.class);
System.out.println("转换的对象id: "+p.getId()+", name: "+
p.getName()+", password: "+p.getPassword());
}
}
ObjectMapper
对象提供的两个方法,可以完成对象和 JSON 字符串的互转writeValueAsString
:把对象转换为 JSON 字符串readValue
:把 JSON 字符串转换为对象基于以上特点,JSON 在 Web 应用程序中被广泛使用,如前后端交互,API 接口数据传输等
接收 JSON 对象,需要使用 @RequestBody
注解
RequestBody
:请求正文,意思是这个注解作用在请求正文的数据绑定,请求参数必须写在正文中后端实现:
@RequestMapping("/m8")
public Object method8(@RequestBody Person person){
return person.toString();
}
}
使用 Postman 来发送 JSON 请求:
尝试去掉 @RequestBody
试试
@RequestMapping("/m9")
public Object method9(Person person){
return person.toString();
}
请求响应结果如下:
Person
对象赋值