欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

json和fastjson的使用

程序员文章站 2022-06-17 10:26:29
...

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>

json和fastjson的使用

JS中字符串和JSON互转

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

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

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

json和fastjson的使用
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和fastjson的使用

初始化JSON对象

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

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

json和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和fastjson的使用

对象的反序列化

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

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

json和fastjson的使用

对象数组序列化

  • 如果对象中的属性为空,那么序列化的时候将自动忽略这个属性,不体现在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和fastjson的使用

对象数组的反序列化

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和fastjson的使用

序列化的作用

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 fastjson