JSON介绍:
- JavaScript Objecct Notation(JavaScript对象表示法)
- JSON是轻量级的文本数据交换格式
- JSON对立与语言,具有自我描述性
JSON语法规则:
- 数据由键**(key)/值(value)**描述,由冒号分隔
{
"sites":[{"name":"慕课网',"url":"www.imooc.com"}]
}
- JSON中标准的书写格式键值(key/value)都必须要用双引号进行包裹
- key和value中间使用冒号分隔开
- 大括号代表一个完整的对象,可以拥有多个键/值对
例如:
{ "firstName":"John" , "lastName":"Doe" }
- 大括号包裹的叫JSON对象,一个JSON对象包含多组key/value对,多组key/value对用逗号隔开;
- 中括号保存数组,多个对象之间保存间隔
- 中括号包裹的叫数组,一个数组中可以包含多个JSON对象,多个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": "刘楠"
}
]
}
]
FastJSON应用
员工类:
import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
public class Employee {
private Integer empno;
private String ename;
private String job;
//@JSONField(format="yyyy-MM-dd HH:mm:ss SSS")
@JSONField(name = "hiredate" , format="yyyy-MM-dd")
private Date hdate;
private Float salary;
@JSONField(serialize = false)
private String dname;
//省略get/set/构造方法
}
1. FastJSON对象序列化与反序列化
//FastJSON中提供了JSON对象,完成对象与JSON字符串的互相转换
//序列化(将对象转化为json)
String json = JSON.toJSONString(employee);
System.out.println(json);
//反序列化(将json转化为对象)
Employee emp = JSON.parseObject(json, Employee.class);
System.out.println(emp.getEname());
- 序列化(将对象转化为json)运行结果
- 反序列化(将json转化为对象) 运行结果
- 将时间变量格式化
//@JSONField(format="yyyy-MM-dd HH:mm:ss SSS")
@JSONField(name = "hiredate" , format="yyyy-MM-dd")
private Date hdate;
- 使用注解使得指定变量不序列化
@JSONField(serialize = false)
private String dname;
2. FastJSON对象数组序(list)列化与反序列化
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++) {
Employee employee = new Employee();
employee.setEmpno(4488 + i);
employee.setEname("员工" + i);
emplist.add(employee);
}
//序列化(将对象转化为json)
String json = JSON.toJSONString(emplist);
System.out.println(json);
//反序列化(将json转化为对象)
List<Employee> emps = JSON.parseArray(json , Employee.class);
for(Employee e : emps) {
System.out.println(e.getEmpno() + ":" + e.getEname());
}
}
}
- 运行结果