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对象的转化

版权声明:本文为ctf99525原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ctf99525/p/15017583.html