json和fastjson的使用

JSON

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

语法

  • 数据由键(key)/值(value)描述,由逗号分隔

  • 大括号代表一个完整的对象,其中可以拥有多个键/值对

  • 中括号保存数组,多个对象之间使用逗号分隔

  • 键值除了数字都要用双引号括起来

//数组
[
	{
		"empno": 7891,
		"ename": "王五",
		"department": "研发部",
		"job": "java工程师",
		"salary": 15000
	},
	{
		"empno": 7892,
		"ename": "李乐",
		"department": "市场部",
		"job": "销售经理",
		"salary": 18000,
		"customers": [
			{
				"cname": "李晓"
			},
			{
				"cname": "刘通"
			}
		]
	}
]

JavaScript访问JSON对象

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	/* 定义一个数组(JSON对象),采用JSON的格式 */
	/* 数组中保存的是一个个员工对象 */
	var json=[
		{
			"empno": 7891,
			"ename": "王五",
			"department": "研发部",
			"job": "java工程师",
			"salary": 15000
		},
		{
			"empno": 7892,
			"ename": "李乐",
			"department": "市场部",
			"job": "销售经理",
			"salary": 18000,
			"customers": [
				{
					"cname": "李晓"
				},
				{
					"cname": "刘通"
				}
			]
		}
	];
	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.department);
		document.write(","+emp.job);
		document.write(","+emp.salary);
		document.write("</h1>");
		/* emp.customers也是数组(里面保存着对象),在js中数组就是一个对象 ,判断这个对象是否存在*/
		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>

在这里插入图片描述

JS中字符串和JSON互转

将JSON格式的字符串转换成JSON对象

JSON.parse() ,JSON是浏览器的内置对象

<script>
	/* 长得像JSON的字符串 引号要用转义符*/
	var str="{\"name\":\"王勒\"}";
	/* 将字符串转换成JSON对象 */
	var json=JSON.parse(str);
	console.log(json);
</script>

在这里插入图片描述
Ajax,是让JS和java后台进行通信的方式,java后台服务器会返回长得像JSON的字符串,通过JSON.parse()获得JSON对象后,在JS中才能提取其中的属性值。

将JSON对象转换成字符串

用JSON.stringify() 转换成JSON格式的字符串

<script>
    /* JSON对象可以是数组对象,也可以是普通对象*/
	var json={"name":"张三"};
	var str=JSON.stringify(json);
	console.log(str);
</script>

在这里插入图片描述

初始化JSON对象

	var json1={};
	json1.name="张丹";
	json1.age=18;
	json1.sex="女";
	console.info(json1);

FastJSON对象的序列化和反序列化

在这里插入图片描述

序列化

javaBean

public class Employee {
	private int empno;
	private String ename;
	private String department;
	//fastJSON注解,因为日期序列化后是以时间戳的形式呈现,需要用注解指定格式
	//name是定义序列化后字符串中的key值
	@JSONField(name="firedate",format="yyyy-MM-dd")
	private Date hdate;
	//让这个属性不被序列化
	@JSONField(serialize=false)
	private float salary;
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getDepartment() {
		return department;
	}
	public void setDepartment(String department) {
		this.department = department;
	}
	public Date getHdate() {
		return hdate;
	}
	public void setHdate(Date hdate) {
		this.hdate = hdate;
	}
	public float getSalary() {
		return salary;
	}
	public void setSalary(float salary) {
		this.salary = salary;
	}
}

对象的序列化

JSON.toJSONString()

public class FastJson {
	public static void main(String[] args) {
		Employee employee=new Employee();
		employee.setEmpno(7895);
		employee.setEname("吴磊");
		employee.setDepartment("研发部");
		Calendar c=Calendar.getInstance();
		c.set(2015, 7, 21);
		employee.setHdate(c.getTime());
		employee.setSalary(15000f);
		String json=JSON.toJSONString(employee);
		System.out.println(json);
	}
}

在这里插入图片描述

对象的反序列化

JSON.parseObject(args1,args2) 第一个参数是json格式的字符串,第二个参数是反序列化javaBean的类

  • 如果序列化的时候某个属性没有被序列化,那么反序列化的时候就为null或者0
Employee emp=JSON.parseObject(json,Employee.class);
System.out.println(emp.getEname()+emp.getSalary());

在这里插入图片描述

对象数组序列化

  • 如果对象中的属性为空,那么序列化的时候将自动忽略这个属性,不体现在JSON格式的字符串中
	List<Employee> empList=new ArrayList<>();
		for(int i=0;i<3;i++) {
			Employee emp=new Employee();
			emp.setEmpno(4488+i);
			emp.setEname("员工"+i);
			empList.add(emp);
		}
		String json=JSON.toJSONString(empList);
		System.out.println(json);

在这里插入图片描述

对象数组的反序列化

JSON.parseArray() 第一个参数是json格式的字符串,第二个参数是反序列化数组中对象的javaBean的类,返回List<T>

		List<Employee> emps=JSON.parseArray(json,Employee.class);
		for(Employee e:emps) {
			System.out.println(e.getEmpno()+":"+e.getEname());
		}

在这里插入图片描述

序列化的作用

JSON.parseArray() 第一个参数是json格式的字符串,第二个参数是反序列化数组中对象的javaBean的类,返回List<T>

		List<Employee> emps=JSON.parseArray(json,Employee.class);
		for(Employee e:emps) {
			System.out.println(e.getEmpno()+":"+e.getEname());
		}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章