整体介绍

掌握JSON语法的书写规则 掌握JSON与JavaScript的交互技巧 掌握JSON与Java之间的序列化与反序列化

JSON介绍

◆JavaScript Object Notation(JavaScript对象表示法) ◆JSON是轻量级的文本数据交换格式 ◆JSON独立于语言,具有自我描述性,更易理解

JSON语法规则

◆数据由键(key)/值(value)描述,由逗号分隔 ◆大括号代表一个完整的对象,拥有多个键/值对 ◆中括号保存数组,多个对象之间使用逗号分隔

利用JSON存储员工信息表

idea2019没有web模板 使用idea创建web项目

在JAVA Enterprise 中新建web项目,包含了servlet、xml等文件

[
	{
		"empno": 7369,
		"ename": "李宁",
		"job": "软件工程师",
		"hiredate": "2017-05-12",
		"salary": 13000,
		"dname": "研发部"
	},
	{
		"empno": 7499,
		"ename": "王乐",
		"job": "客户经理",
		"hiredate": "2017-04-22",
		"salary": 10000,
		"dname": "市场部",
		"customers": [
			{
				"cname": "李东"
			},
			{
				"cname": "刘楠"
			}
		]
	}
]

利用JS访问JSON

在webapps下新建sample1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<script type="text/javascript">
    var json = [
        {
            "empno": 7369,
            "ename": "李宁",
            "job": "软件工程师",
            "hiredate": "2017-05-12",
            "salary": 13000,
            "dname": "研发部"
        },
        {
            "empno": 7499,
            "ename": "王乐",
            "job": "客户经理",
            "hiredate": "2017-04-22",
            "salary": 10000,
            "dname": "市场部",
            "customers": [
                {
                    "cname": "李东"
                },
                {
                    "cname": "刘楠"
                }
            ]
        }
    ];
//    在浏览器控制台输出json
    console.log(json);
</script>
</head>
<body>
 
</body>
</html>

输入地址访问http://localhost:8080/JSON/sample1.html

循环输出json文件

for(var i = 0 ; i < json.length ; i++){
		var emp = json[i];
		document.write("<h1>");
		document.write(emp.empno);
		document.write("," + emp.ename);
		document.write("," + emp.job);
		document.write("," + emp.hiredate);
		document.write("," + emp.salary);
		document.write("," + emp.dname);
		document.write("</h1>");
}

JS中将字符串转为JSON

◆JSON.parse()方法将字符串转换为JSON对象 ◆JSON.stringify()方法将JSON对象转换为字符串 继续在webapps下新建sample2.html

JSON中键值对都要用双引号包裹,但是会与str下的双引号冲突,所以加上\符号即可

<body>
    <script>
        var str = "{\"class_name\":\"五年级四班\"}";//str.ename
        var json = JSON.parse(str);
        console.log(str);
        console.log(json);
    </script>
</body>

可以使用document.write打印在屏幕上

document.write("班级:" + json.class_name);

JS中将JSON转为字符串

继续新建sample3.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>JSON转字符串</title>
    <script type="text/javascript">
        var json1 = {"class_name" : "五年级四班"};
        var str1 = JSON.stringify(json1);
        console.info(json1);
        console.info(str1);
    </script>
</head>
<body>
 
</body>
</html>

JSON与字符串用JS的用途在于即将学到的Ajax应用

初始化JSON对象

var json2 = {};
        json2.class_name = "五年级五班";
        json2.floor = "逸夫楼四层";
        json2.teacher = "王义夫";
        console.info(json2);

JSON与JAVA交互

JAVA是开源的,参与者为JAVA添砖加瓦

◆Java的SON工具包还有FastJson、Jackson、Gson、Json-lib… ◆FastJson是阿里巴巴著名的SON序列化与反序列工具包 ◆FastJson国内拥有大量使用者,拥有API简单,效率高等优点

github开源项目Central Repository: com/alibaba/fastjson (maven.org) 选择最新版本 source是源代码,javadoc是java文档,我们只需要核心jar包

fastjson-2.0.9.jar

在webapps下的web-inf新建lib目录,将jar包粘贴进去即可 IDEA - 导入FastJson/Gson的JAR包教程

在线引入fastjson: 在pom.xml添加fastjson的maven依赖:

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.52</version>
        </dependency>

记得右键点击Maven重新构建项目,这时会进行fastjson的下载 如果外部库出现Maven:com.alibaba:fastjson:1.2.52即添加依赖成功,如果文件一串红,即下载不成功,请添加阿里云镜像重新下载:

<repositories>
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>

FastJSON对象序列化与反序列化

package com.imooc.json;
 
import com.alibaba.fastjson.JSON;
 
import java.util.Calendar;
 
public class FastJsonSample1 {
	public static void main(String[] args) {
		Employee employee = new Employee();
		employee.setEmpno(4488);
		employee.setEname("王晓东");
		employee.setJob("客户经理");
		employee.setSalary(10000f);
		employee.setDname("市场部");
		Calendar c = Calendar.getInstance();
		c.set(2019, 0, 30, 0, 0, 0);
		employee.setHdate(c.getTime());
		//FastJSON提供了JSON对象,完成对象与JSON字符串的互相转换
		String json = JSON.toJSONString(employee);
		System.out.println(json);
		Employee emp = JSON.parseObject(json, Employee.class);
		System.out.println(emp.getEname());
	}
}
//FastJSON提供了JSON对象,完成对象与JSON字符串的互相转换
	String json = JSON.toJSONString(employee);
	System.out.println(json);
	Employee emp = JSON.parseObject(json, Employee.class);
	System.out.println(emp.getEname());

toJSONString可以将原始对象转换为JSON格式,parseObject将JSON转化为java对象 JSON反序列化到JAVA对象中:

生成JSON数组块:

package com.imooc.json;
 
import com.alibaba.fastjson.JSON;
 
import java.util.ArrayList;
import java.util.List;
 
public class FastJsonSample2 {
	public static void main(String[] args) {
		List emplist = new ArrayList();
		for (int i = 1 ; i <= 100 ; i++) {
			Employee employee = new Employee();
			employee.setEmpno(4488 + i);
			employee.setEname("员工" + i);
			emplist.add(employee);
		}
		String json = JSON.toJSONString(emplist);
		System.out.println(json);
		List<Employee> emps = JSON.parseArray(json , Employee.class);
		for(Employee e : emps) {
			System.out.println(e.getEmpno() + ":" + e.getEname());
		}
	}
}

序列化与反序列化: JAVA转为JSON序列化,JSON转为JAVA反序列化:

用途在于系统间信息转换,如100个员工信息,从一个系统先从java对象转为json,在另一个系统将json转为java