导学
针对于各位同学,在前端课程中已经学习过Json,所以本章主要讲解Json与Java的交互。
Json语法
JavaScript Object Notation(JavaScript对象表示法),JSON是轻量级的文本数据交互格式,JSON独立于语言,具有自我描述性,更易于理解逐渐替代了xml。
JSON语法规则:
- 数据由键(key)/值(value)描述,由逗号分隔。
- 大括号代表一个完整的对象,拥有多个键/值对。
- 中括号保存数组,多个对象之间使用逗号分隔。
- 复合类型的值只能是数组或对象,不能是函数、日期对象、正则表达式等。
- 简单类型的值包括:字符串、数值、布尔值和null(不能使用NaN/undefined)。
- 字符串必须使用双引号表示,不能使用单引号,或者没有双引号。
- 对象的键必须放在双引号里。
- 数组或对象的最后一个成员后面不能加逗号。
{"employee": {"市场部": [{"name": "张三","salary": 7000,"time": "1999-02-09","job": "市场营销专员"}, {"name": "李四","salary": 9000,"time": "1997-02-09","job": "市场经理"}],"开发部": [{"name": "王五","salary": 9000,"time": "2006-02-09","job": "Java开发工程师"}, {"name": "孙六","salary": 12000,"time": "2003-02-09","job": "项目总监"}],"总经理": {"name": "赵一","salary": 26000,"time": "199-02-09"}}}
JS中JSON对象和JSON字符串的转换
在数据传输中,JSON是以字符串形式传递的,而JS操作的是JSON对象
JSON.stringify()方法是用于将JSON对象转为字符串。该字符串符合 JSON 格式要求,并且可以通过JSON.parse方法还原。JSON.parse()方法将 字符串 转化为 JSON 对象。var jsonStr = '{"name":"Lisa","password":"123"}';var jsonObj = {"name":"Lisa","password":"123"};//String转化为JSON对象var jsonObject = JSON.parse(jsonStr);//将对象转回字符串var jsonstr = JSON.stringify(jsonObject);
JSON与Java进行交互
我们可以借助工具包,使Json和Java对象之间实现相互的转换,常用Java的JSON工具包有FastJson(阿里巴巴开发),Jackson ,Gson, Json-lib等。
FastJson是阿里巴巴著名的JSON序列化与反序列工具包,FastJson国内拥有大量的使用者,拥有API简单 效率高等优点。
Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 总之就是提供了对象与JSON 之间的转换。
该工具包可以通过著名的开源平台https://github.com找到。


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”) //通过FastJson包中设置的注解,设置输出内容的名称和格式 @JSONField(name = “hiredate” , format=”yyyy-MM-dd”) private Date hdate; private Float salary; @JSONField(serialize = false)//设置是否转换该字段 private String dname; public Integer getEmpno() {
} public void setEmpno(Integer empno) {return empno;
} public String getEname() {this.empno = empno;
} public void setEname(String ename) {return ename;
} public String getJob() {this.ename = ename;
} public void setJob(String job) {return job;
} public Date getHdate() {this.job = job;
} public void setHdate(Date hdate) {return hdate;
} public Float getSalary() {this.hdate = hdate;
} public void setSalary(Float salary) {return salary;
} public String getDname() {this.salary = salary;
} public void setDname(String dname) {return dname;
}this.dname = dname;
}
```import java.util.Calendar;import com.alibaba.fastjson.JSON;public class FastJsonSample1 {public static void main(String[] args) {Employee employee = new Employee();employee.setEmpno(4488);employee.setEname("王晓东");employee.setJob("客户经理");employee.setSalary(10000f);employee.setDname("市场部");Calendar c = Calendar.getInstance();c.set(2019, 0, 30, 0, 0, 0);employee.setHdate(c.getTime());//FastJSON中提供了JSON对象,完成对象与JSON字符串的互相转换String json = JSON.toJSONString(employee);System.out.println(json);Employee emp = JSON.parseObject(json, Employee.class);System.out.println(emp.getEname());}}
FastJSON对象数组序列化与反序列化
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);}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());}}}
