JSON详解
JSON 语法规则
- 数据由键(key)/值(value)描述的,由逗号分隔开
- 大括号代表一个完整的对象,拥有多个键/值对
- 中括号保存数组,多个对象之间使用逗号分隔
举个简单的例子
{
"site:"[
{
"name":"百度",
"url":"www.baidu.com"
},
{
"name":"网易",
"url":"www.163.com"
}
]
}
JSON与字符串之间的转换
<script type="text/javascript">
var str="{\"class_name\":\"五年级三班\"}";//注意转义符和字符串的格式
var json= JSON.parse(str);//将字符串转换为JSON对象
</script>
<script type="text/javascript">
var json={"class_name":"五年级三班"};
var str=JSON.stringify(json);//将JSON转换为字符串
</script>
JSON与JAVA的交互
Java的JSON工具包有许多,例如:FastJson、Jackson、Gson、Json-lib…
FastJson JSON序列化 与 反序列工具包
下载地址:网页中有详细的介绍FastJson
下载后直接复制到WebContent/WEB-INF/lib 即可
下面举一个简单的例子
Employee类(JavaBean)
package com.json;
import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
public class Employee {
private Integer empno;//员工编号
private String ename;//员工姓名
private String job;//岗位
@JSONField ( name="hiredate" ,format= "yyyy-MM-dd")
//格式化时间的key值和value值
private Date hdate;//入职时间
private Float salary;//薪资
@JSONField (serialize = false )
//序列化跳过dname属性
private String dname;//部门名称
//getters和setters方法
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
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 getHdate() {
return hdate;
}
public void setHdate(Date hdate) {
this.hdate = hdate;
}
public Float getSalary() {
return salary;
}
public void setSalary(Float salary) {
this.salary = salary;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Employee [empno=" + empno + ", ename=" + ename + ", job=" + job + ", hdate=" + hdate + ", salary="
+ salary + ", dname=" + dname + "]";
}
}
注意一下@JSONField 映射 的作用
实现类1
package com.json;
import java.util.Calendar;
import com.alibaba.fastjson.JSON;
public class FastJsonSample1 {
public static void main(String[] args) {
Employee emp = new Employee();
emp.setEmpno(5555);
emp.setEname("陈某人");
emp.setJob("客户经理");
emp.setSalary(10000f);
emp.setDname("市场部");
Calendar c=Calendar.getInstance();
//Calendar 是一个抽象类, 无法通过直接实例化得到对象.
//因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar对象, 得到的 Calendar 由当前时间初始化
c.set(2021, 0, 30, 0, 0, 0);//月份从0开始
emp.setHdate(c.getTime());
//FastJson中提供了JSON对象,完成对象与JSON字符串的互相转换
String json=JSON.toJSONString(emp);//对象序列化
System.out.println(json);
Employee employee=JSON.parseObject(json,Employee.class);//对象反序列化
System.out.println(employee);
}
}
实现类2
package com.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++) {
Employee emp=new Employee();
emp.setEmpno(5555+i);
emp.setEname("员工"+i);
emplist.add(emp);
}
String json= JSON.toJSONString(emplist);
System.out.println(json);
List<Employee>emps=JSON.parseArray(json, Employee.class);
for(Employee e:emps) {
System.out.println(e.getEmpno()+":"+e.getEname());
}
}
}
很简单的小例子,数据传送和数据保存很实用的一个方法。