整体介绍
掌握JSON语法的书写规则 掌握JSON与JavaScript的交互技巧 掌握JSON与Java之间的序列化与反序列化
JSON介绍
◆JavaScript Object Notation(JavaScript对象表示法) ◆JSON是轻量级的文本数据交换格式 ◆JSON独立于语言,具有自我描述性,更易理解
JSON语法规则
◆数据由键(key)/值(value)描述,由逗号分隔 ◆大括号代表一个完整的对象,拥有多个键/值对 ◆中括号保存数组,多个对象之间使用逗号分隔
利用JSON存储员工信息表
在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