目录
一、创建:
右键单击项目的WebContent——new——选择File——写文件名时,后缀为".json"。如下图所示:
二、格式化:
选中JSON文件的内容——点击Souce——Format(Ctrl+Shift+F)。
原来:
格式化后:
三、JSON与Javascript:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
var json=[
{
"name": "Mary",
"sex": 01,
"job": "teacher"
},
{
"name": "Jhon",
"sex": 00,
"job": "manager",
"customers": [
{
"cname": "Frank"
},
{
"cname": "Li"
},
{
"cname": "Chen"
}
]
}
];
console.log(json); //浏览器控制台调试
for(var i=0;i<json.length;i++){
var emp=json[i];
document.write("<h1>");
document.write(emp.name);
document.write(","+emp.sex);
document.write(","+emp.job);
document.write("</h1>");
if(emp.customers !=null){
document.write("<h2>----");
for(var j=0;j<emp.customers.length;j++){ //注意
var customer=emp.customers[j];
document.write(customer.cname+",");
}
document.write("</h2>");
}
}
</script>
</head>
<body>
</body>
</html>
四、JSON与字符串相互转换:
JSON对象是浏览器内置对象,但IE8以下的版本不支持。
1.字符串转JSON对象:JSON.parse()
发现个小问题:(ˉ▽ˉ;)...生成html文件时,选File生成的页面不会有结构。选HTML File生成的html文件才会有结构。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>字符串转JSON</title>
<script type="text/javascript">
var str="{\"class_name\":\"五年级三班\" }";//直接加""会与字符串冲突,在双引号前加\进行原义输出
var json=JSON.parse(str);//JSON是内置对象
console.log(json);
console.log(str);
document.write("班级:"+json.class_name);
</script>
</head>
<body>
</body>
</html>
上面Object表示是一个对象,可以直接使用。而下面只是一个JSON样式的字符串,不能直接访问。
但注意原始字符串必须是JSON样式才能转换!
2.JSON对象转字符串:JSON.stringify()
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSON转字符串</title>
<script type="text/javascript">
var json={"class_name":"五年级三班"};
var str=JSON.stringify(json);
console.info(json); //打印输出
console.info(str);
var json2={}; //JSON对象的另一种初始化方式
json2.class_name="五年级四班";
json2.floor="四楼";
json2.teacher="龚老师";
console.info(json2);
</script>
</head>
<body>
</body>
</html>
五、JSON与Java交互:
JSON逐渐替代xml成为保存对象、数据传输的一个首选。
JSON工具包:把Java对象转化为JSON 或 把JSON转化为Java对象的第三方组件。比如有FastJson(阿里巴巴开发)、Jackson(国外老牌)、Gson(谷歌开发)、Json-lib等。
FastJson是阿里巴巴著名的JSON序列化与反序列化工具包。其在国内有大量 使用者,优点有:API简单、效率高等。
获取见该教程:https://blog.csdn.net/qq_43542011/article/details/118281143
六、FastJson序列化(单个对象)与Json注解:
1.序列化:JSON.toJSONString()
①Employee.java
package com.immoc.json;
import java.util.Date;
public class Employee {
private Integer eid;
private String ename;
private String job;
private Date date; //入职时间
private Float salary;
private String cname; //部门名称
public Integer getEid() {
return eid;
}
public void setEid(Integer eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Float getSalary() {
return salary;
}
public void setSalary(Float salary) {
this.salary = salary;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
②FastJsonSample1.java
package com.immoc.json;
import java.util.Calendar;
import com.alibaba.fastjson.JSON;
public class FastJsonSample1 {
public static void main(String[] args) {
Employee employee=new Employee();
employee.setEid(01001);
employee.setEname("萧瑾瑜");
employee.setJob("项目经理");
employee.setSalary(20000f);
employee.setCname("开发部");
Calendar c=Calendar.getInstance(); //用日历类对时间初始化
c.set(2021, 5, 27, 0, 0, 0); //月份是从0开始的,这里表示6月
employee.setDate(c.getTime()); //获取日期对象
// 接下来把employee转化成JSON对象:FastJson中提供了JSON对象来完成对象与JSON字符串的互相转化
String json=JSON.toJSONString(employee); //把employee对象中所有不为空的属性都JSON序列化
System.out.println(json);
}
}
2.JSON注解@JSONField的使用
①结果图中,“date”后面的一串数字是时间戳代表了从1970年到现在的毫秒数,需要以可读方式转换,借助JSON的注解进行格式化,修改如下:
结果如下:
②可以对键进行格式化:
结果:
③如果不对其中一项序列化:
结果:工资这项已消失不见
3.反序列化:JSON.parseObject(,)
六、JSON序列化、反序列化(集合):
1.序列化:JSON.toJSONString()
如图,在包中新增名为FastJsonSample2的类
package com.immoc.json;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
public class FastJsonSample2 {
public static void main(String[] args) {
List empList=new ArrayList();
for (int i = 1; i <=100; i++) { //模拟100个员工
Employee employee=new Employee();
employee.setEid(0001+i); //加i使员工编号不重复
employee.setEname("员工"+i);
empList.add(employee);
}
String json=JSON.toJSONString(empList); //还是用toJSONString()
System.out.println(json);
}
}
其中,当FastJSON的属性值为null,会自动忽略输出。
2.反序列化:JSON.parseArray(,)
在FastJsonSample2.java中增加如下的代码:
List<Employee> emps=JSON.parseArray(json,Employee.class); //反序列化:原始的JSON数组对象转化出一个个的Employee对象
for(Employee e:emps) {
System.out.println(e.getEid()+":"+e.getEname());
}