持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
写在前面😘
大一电子信息工程新生,请多多关照,希望能在掘金记录自己的学习历程!
一、JSON概述
JSON 全称“JavaScript Object Notation”(
JavaScript 对象表示法),是一种轻量级的、基于文本的、开放的数据交换格式。JSON 是一种纯字符串形式的数据,它本身不提供任何方法(函数),非常适合在网络中进行传输。
如下是 JavaScript 对象的定义格式:
{
name:"zhangsan",
age:23,
city:"北京"
}
接下来我们再看看 JSON 的格式:
{
"name":"zhangsan",
"age":23,
"city":"北京"
}
xml写法:
<student>
<name>张三</name>
<age>23</age>
<city>北京</city>
</student>
1️⃣JSON优点
与 XML 相比,JSON 具有以下优点:
- 结构简单、紧凑:与 XML 相比,JSON 遵循简单、紧凑的风格,有利于程序员编辑和阅读,而 XML 相对比较复杂;
- 更快:JSON 的解析速度比 XML 更快(因为 XML 与 HTML 很像,在解析大型 XML 文件时需要消耗额外的内存),存储同样的数据,JSON 格式所占的存储空间更小;
- 可读性高:JSON 的结构有利于程序员阅读。
2️⃣JSON缺点
任何事物都不可能十全十美,JSON 也不例外,比如:
- 只有一种数字类型:JSON 中只支持 IEEE-754 双精度浮点格式,因此您无法使用 JSON 来存储许多编程语言中多样化的数字类型;
- 没有日期类型:在 JSON 中您只能通过日期的字符串(例如:1970-01-01)或者时间戳(例如:1632366361)来表示日期;
- 没有注释:在 JSON 中无法添加注释;
- 冗长:虽然 JSON 比 XML 更加简洁,但它并不是最简洁的数据交换格式,对于数据量庞大或用途特殊的服务,您需要使用更加高效的数据格式。
二、JSON 基础语法
1️⃣JSON 语法规则
JSON 语法是 JavaScript 对象表示语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 大括号 {} 保存对象
- 中括号 [] 保存数组,数组可以包含多个对象
2️⃣JSON 名称/值对
JSON 数据的书写格式是:
key : value
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"name" : "倔强的牛角"
这很容易理解,等价于这条 JavaScript 语句:
name = "倔强的牛角"
3️⃣JSON 值
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在大括号中)
- null
三、使用axios发送json
axios是一个很强大的工具。我们只需要将需要提交的参数封装成 js 对象,并将该 js 对象作为axios的data属性值进行,它会自动将 js 对象转换为JSON串进行提交。如下:
var jsObject = {name:"张三"};
axios({
method:"post",
url:"http://localhost:8080/ajax-demo/axiosServlet",
data:jsObject //这里 axios 会将该js对象转换为 json 串的
}).then(function (resp) {
alert(resp.data);
})
==注意:==
- 发送异步请求时,如果请求参数是
JSON格式,那请求方式必须是POST。因为JSON串需要放在请求体中。
四、JSON和Java对象的相互转换
作为后端我们就需要重点学习以下两部分操作:
- 请求数据:JSON字符串转为Java对象
- 响应数据:Java对象转为JSON字符串
- 接下来给大家介绍一套 API,可以实现上面两部分操作。这套 API 就是
Fastjson
1️⃣Fastjson 概述
Fastjson 是阿里巴巴提供的一个Java语言编写的高性能功能完善的
JSON库,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。
2️⃣Fastjson 使用
a.导入坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
b.Java对象转JSON字符串
-
将 Java 对象转换为 JSON 串,只需要使用
Fastjson提供的JSON类中的 toJSONString() 静态方法即可String jsonStr = JSON.toJSONString(obj);
c.JSON字符串转Java对象
-
将 json 转换为 Java 对象,只需要使用
Fastjson提供的JSON类中的 parseObject() 静态方法即可。User user = JSON.parseObject(jsonStr, User.class);
3️⃣代码演示
a.前端代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<!--导入Axios的js文件-->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
var user = {username: "hello", password: "123json"}
// 发送JSON数据必须使用POST请求
axios({
//发送axios请求
method: "post",
url: "http://localhost:8080/PracticeDemo/json",
//post请求体,发送json数据
data: user
}).then(function (resp) {
//处理服务端响应
console.log(resp.data);
})
</script>
</html>
b.后端代码
@WebServlet(name = "JsonServlet", value = "/json")
public class JsonServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("请求方式:"+request.getMethod());
// 1.获取json数据,getParameter 不能接收json的数据
BufferedReader br = request.getReader();
String json = br.readLine();
// 2.将json数据转换成User对象
User jsonToUser = JSON.parseObject(json, User.class);
// 3.将user对象转换为json字符串
String userToJson = JSON.toJSONString(jsonToUser);
// 4.向前端发送json数据
response.getWriter().write(userToJson);
System.out.println(json);
System.out.println(jsonToUser);
System.out.println(userToJson);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
c.结果演示


写在后面🍻
感谢观看啦✨
有什么不足,欢迎指出哦💖
掘金的运营同学审核辛苦了💗