JSON入门教程

154 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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 对象作为 axiosdata 属性值进行,它会自动将 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.结果演示

image-20220508175210398

image-20220508175314335

写在后面🍻

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