目录

一、创建:

二、格式化:

三、JSON与Javascript:

四、JSON与字符串相互转换:

1.字符串转JSON对象:JSON.parse()

2.JSON对象转字符串:JSON.stringify()

五、JSON与Java交互:

六、FastJson序列化(单个对象)与Json注解:

1.序列化:JSON.toJSONString()

2.JSON注解@JSONField的使用

3.反序列化:JSON.parseObject(,)

六、JSON序列化、反序列化(集合):

1.序列化:JSON.toJSONString()

2.反序列化:JSON.parseArray(,)


一、创建:

右键单击项目的WebContent——new——选择File——写文件名时,后缀为".json"。如下图所示:

   

jsonschema 生成java json制作_字符串

二、格式化:

选中JSON文件的内容——点击Souce——Format(Ctrl+Shift+F)。

原来:

jsonschema 生成java json制作_json_02

格式化后:

jsonschema 生成java json制作_JSON_03

jsonschema 生成java json制作_字符串_04

三、JSON与Javascript:

jsonschema 生成java json制作_jsonschema 生成java_05

<!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>

jsonschema 生成java json制作_JSON_06

四、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>

jsonschema 生成java json制作_jsonschema 生成java_07

上面Object表示是一个对象,可以直接使用。而下面只是一个JSON样式的字符串,不能直接访问。

jsonschema 生成java json制作_json_08

但注意原始字符串必须是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>

jsonschema 生成java json制作_字符串_09

五、JSON与Java交互:

JSON逐渐替代xml成为保存对象、数据传输的一个首选。

JSON工具包:把Java对象转化为JSON 或 把JSON转化为Java对象的第三方组件。比如有FastJson(阿里巴巴开发)、Jackson(国外老牌)、Gson(谷歌开发)、Json-lib等。

FastJson是阿里巴巴著名的JSON序列化与反序列化工具包。其在国内有大量 使用者,优点有:API简单、效率高等。
获取见该教程:

六、FastJson序列化(单个对象)与Json注解:

1.序列化:JSON.toJSONString()

jsonschema 生成java json制作_json_10


①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);
	}

}

jsonschema 生成java json制作_jsonschema 生成java_11

2.JSON注解@JSONField的使用

①结果图中,“date”后面的一串数字是时间戳代表了从1970年到现在的毫秒数,需要以可读方式转换,借助JSON的注解进行格式化,修改如下:

jsonschema 生成java json制作_字符串_12

结果如下:

jsonschema 生成java json制作_JSON_13

②可以对键进行格式化:

jsonschema 生成java json制作_jsonschema 生成java_14

结果:

jsonschema 生成java json制作_jsonschema 生成java_15

③如果不对其中一项序列化:

jsonschema 生成java json制作_JSON_16

结果:工资这项已消失不见

jsonschema 生成java json制作_字符串_17

3.反序列化:JSON.parseObject(,)

jsonschema 生成java json制作_jsonschema 生成java_18

jsonschema 生成java json制作_字符串_19

六、JSON序列化、反序列化(集合):

1.序列化:JSON.toJSONString()

如图,在包中新增名为FastJsonSample2的类

jsonschema 生成java json制作_jsonschema 生成java_20

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);

	}

}

jsonschema 生成java json制作_jsonschema 生成java_21

其中,当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());
			
		}

jsonschema 生成java json制作_jsonschema 生成java_22