Java对象转换为JSON字符串案例
主要内容是Java中利用FastJson对JSON工具的序列化
序列化:简单来说序列化就是用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:想要将对象传输于网络必须进行流化)在对对象流进行读写操作时会引发一些问题,而序列化机制也正是用来解决这些问题
示例:利用FastJson将java对象转变为JSON字符串
创建一个Java类程序,使其后面的赋值更加方便
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| package com.java.json;
import java.util.Date;
public class Employee { private Integer empno; private String ename; private String job; private Date hdarw; private Float salary; private String dname;
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 getHdarw() { return hdarw; }
public void setHdarw(Date hdarw) { this.hdarw = hdarw; }
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; } }
|
再创建一个Java类,将刚刚的java类实例化,并进行赋值然后利用FastJson工具将对象转变为字符串(序列化)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package com.java.json;
import com.alibaba.fastjson.JSON;
import java.util.Calendar;
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(2020,5,16,10,38,10); employee.setHdarw(c.getTime());
String jsonString = JSON.toJSONString(employee); System.out.println(jsonString); } }
|
结果:输出了刚刚在实例化对象中定义好的属性,并以JSON对象的形式输出出来
JSONField注解
这里发现,上面的hdarw的值是:设置时间的毫秒数,很难看懂;为了解决这个问题,需要用到JSON注释来对日期格式进行格式化输出:@JSONField注释
我们在定义属性的java类中编写JSONField注解
这时候我们在运行的效果:
JSONField注解还可以对输出的key进行描述
此时的效果:
JSONFile注解还可以取消个别属性的JSON序列化
效果:可以看到说已经没有dname这个属性
JSON字符串转换为Java对象
主要内容是Java中利用FastJson对java对象的反序列化
反序列化:Java反序列化就是指把字节序列恢复为Java对象的过程,反序列化最重要的作用是根据字节流中保存的对象状态及描述信息,通过反序列化重建对象
示例:利用FastJson将JSON字符串转变为java对象
Employee emp = JSON.parseObject(jsonString,Employee.class):第一个参数为待转换的JSON字符串,第二个参数为想要转换的已存在类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| package com.java.json;
import com.alibaba.fastjson.JSON;
import java.util.Calendar;
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(2020,5,16,10,38,10); employee.setHdarw(c.getTime());
String jsonString = JSON.toJSONString(employee); System.out.println(jsonString);
Employee emp =JSON.parseObject(jsonString,Employee.class); System.out.println(emp.getEname()); } }
|
效果:
Java对象集合与JSON(数组)的转换
在实际业务中,往往会是对多个对象批量出来:这个用处会非常广泛
JSON序列化与反序列化用途,比如:
(1)要求:本地有100个员工对象信息,如何把这100个员工的的信息传递给另外一个系统呢
方法:可以将100个员工的信息JSON序列化,然后传递给另外一个系统;另外一个系统接受后,JSON反序列化成员工对象即可
(2)后面的Ajax中也会用到JSON序列化
多个对象的集合,转成JSON(数组)
String jsonString = JSON.toJSONString(empList):还是这个方法,将对象集合作为参数传入即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package com.java.json;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList; import java.util.List;
public class FastJsonSample2 { public static void main(String[] args) { List<Employee> emplist = new ArrayList<Employee>();
for (int i = 1; i <= 10; i++) { Employee employee = new Employee(); employee.setEmpno(4488+i); employee.setEname("员工"+i); emplist.add(employee); } String jsonString=JSON.toJSONString(emplist); System.out.println(jsonString); } }
|
输出:发现(1)[]说明这是一个集合;(2)只有empno和ename,说明当某个属性的属性值为null的时候,则FastJson会将其忽略
将JSON数组转成对象的集合
List listEmployee = JSON.pareArray(jsonString,Employee.class);将JSON数组,转变为对象集合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package com.java.json;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList; import java.util.List;
public class FastJsonSample2 { public static void main(String[] args) { List<Employee> emplist = new ArrayList<Employee>();
for (int i = 1; i <= 10; i++) { Employee employee = new Employee(); employee.setEmpno(4488+i); employee.setEname("员工"+i); emplist.add(employee); } String jsonString=JSON.toJSONString(emplist); System.out.println(jsonString);
List<Employee> listEmployee = JSON.parseArray(jsonString,Employee.class); for (Employee e:listEmployee){ System.out.println(e.getEmpno()+":"+e.getEname()); } } }
|
效果: