fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化

时间:2023-12-09 22:56:19

fastjson: json对象,json对象数组,javabean对象,json字符串之间的相互转化

在开发过程中,经常需要和前端交互数据,数据交互的格式都是JSON,在此过程中免不了json字符串与JSON对象互相转换,自己在这一方面的概念总是很混乱,最近看源码和博客,在此记录一下。注意:全程用的是fastjson

首先JSON有两种格式,一种是对象格式,一种是对象数组。

在JSON使用中主要的3个类:JSONJSONObjecJSONArray

其中JSONObjecJSONArray继承于JSON的。

JSON对象(JSONObject)

{"id":1,"name":"chen"}

JSON对象数组(JSONArray)

[
{"id":1,"name":"chen"},
{"id":2,"name":"张三"}
]

下面直接进入正题:

Java Bean 和JSON字符串的互转

Java Bean 转 JSON字符串

Java Bean是指Java中的一个普通对象(实体类)例如:

public class Student{
private String name; // 姓名
private Integer age; // 年龄 public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(Integer age){
this.age = age;
}
public Integer getAge(){
return age;
}
@Override
public String toString() {
return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}

使用JSON类的toJSONString()方法,实现JSON对象转化为JSON字符串和Java Bean对象转化为JSON字符串。仔细观察源码发现,该方法经过多次重载,但最终都是实现JSON对象转化为JSON字符串和Java Bean对象转化为JSON字符串。

@Test
public void BeanToJSONTest(){
Student student = new Student();
student.setName("小明");
student.setAge(20); String s1 = JSON.toJSONString(student);
String s2 = JSONObject.toJSONString(student);
String s3 = JSONArray.toJSOnString(student); System.out.println("s1: " + s1);
System.out.println("s2: " + s2);
System.out.println("s3: " + s3);
} // 输出
s1: {"age":20,"name":"小明"}
s2: {"age":20,"name":"小明"}
s3: {"age":20,"name":"小明"}

JSON.toJSONString()JSONObject.toJSONStringJSONArray.toJSOnString,上面说到JSONObjectJSONArray是继承JSON的,看JSONObjectJSONArray的源码并没有重写父类的toJSONString()的方法,而是直接使用父类的toJSONString方法,之前一直弄不明白,看了源码才知道。

JSON字符串 转 Java Bean

使用JSON类的parseObject()方法,实现JSON字符串转换为JSON对象或Java Bean对象。

@Test
public void JOSNToBeanTest(){
String strJson = "{\"age\":20,\"name\":\"小明\"}"; JSONObject jsonObject = JSON.parseObject(strJson);
System.out.println("jsonObject: " + jsonObject); Student student = JSON.parseObject(strJson,Student.class);
System.out.println("student: " + student);
} // 输出
jsonObject: {"name":"小明","age":20}
student: Student{name='小明', age=20}

该方法返回JSONObject对象,用于实现JSON字符串向JSON对象的转化,其内部调用了parse()方法,调用底层的DefaultJSONParser解析类进行转化,在转化失败时,抛出can not cast to JSONObject异常。

该方法不仅能实现JSON字符串向JSON对象的转化,经过重载之后,还能实现JSON字符串向Java Bean对象的转化