JSON序列化和反序列化

1、什么是json序列化和反序列化?

json序列化:就是JavaBean对象转化为JSON格式的字符串。

反序列化:就是序列化的反方向,将字符串转化为JavaBean。

2、为什么要序列化和反序列化?

现在比较流行前后端分离的项目,前后端分离就离不开传递数据,一种好的数据表示形式让开发者和网站能轻易识别是很重要的,而这个数据表示形式就是json。这时候问题又来了,前端要json字符串,后端要javaBean对象(假设后端采用java语言)怎么办?此时就需要json的序列化和反序列化了。

3、流行的类库

json处理有三个比较流行的类库,分别是阿里巴巴开发的FastJson,谷歌开发的Gosn,和Spring Boot内置的Jackson

4、简单的json形式

{
	"myAge": 5,
	"myBirth": "2021-01-24 14:19:29 025",
	"myName": "小狗"
}

下边以fastjson为例

JSONField() 注解

@JSONField(ordinal = 1) //指定json序列化的顺序
@JSONField(serialize = false) //json序列化时忽略该字段
@JSONField(deserialize = false) //json反序列化时转成对象将忽略该字段
@JSONField(format = “yyyy-MM-dd HH:mm:ss SSS”) //时间格式转换

常用的方法

JSONObject.toJSONString(value) 将value对象转化成json字符串

JSONObject.parseObject(value,java.class) 将value转化成java对象

JSONObject.parseArray(value,java.class) 将value转化成java对象数组

如果不写java.class,只写value,会转成JSONObject字符串。

代码:

创建一个maven项目,导入fastjson和lombok。

lombok中的注解可以让我们不生产get和set方法

    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>fastjsonartifactId>
        <version>1.2.70version>
    dependency>

    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <version>1.18.8version>
    dependency>

1、创建Animal.java类

import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Animal {

    @JSONField(name = "myName")
    private String myName;

    @JSONField(name = "myAge")
    private int myAge;

    @JSONField(name = "myBirth",format = "yyyy-MM-dd HH:mm:ss SSS")
    private Date myBirth;

}

2、创建Persion.java类

import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Persion {

    @JSONField(name = "name")
    private String name;

    @JSONField(name = "age")
    private int age;

    @JSONField(name = "Birth" ,format = "yyyy-MM-dd HH:mm:ss SSS")
    private Date Birth;

}

toJSONString() 的使用

将list集合转化成json

        List<Persion> persions = new ArrayList<Persion>();

        persions.add(new Persion("张三", 16, new Date()));
        persions.add(new Persion("李四", 18, new Date()));
        persions.add(new Persion("王五", 20, new Date()));
        persions.add(new Persion("麻子", 22, new Date()));
        //将list集合转化成json
        String jsonPersion= JSON.toJSONString(persions);
        System.out.println(jsonPersion);

输出结果如下:

[{
	"Birth": "2021-01-24 14:33:43 229",
	"age": 16,
	"name": "张三"
}, {
	"Birth": "2021-01-24 14:33:43 229",
	"age": 18,
	"name": "李四"
}, {
	"Birth": "2021-01-24 14:33:43 229",
	"age": 20,
	"name": "王五"
}, {
	"Birth": "2021-01-24 14:33:43 229",
	"age": 22,
	"name": "麻子"
}]

将map集合转化成json

        Map animal = new HashMap();

        animal.put("宠物狗",new Animal("小狗",5, new Date()));
        animal.put("波斯猫",new Animal("小猫",6, new Date()));
        animal.put("猪",new Animal("小猪",7, new Date()));

        //将list集合转化成json
        String jsonAnimal = JSON.toJSONString(animal);
        System.out.println(jsonAnimal);

输出结果如下:

{
	"宠物狗": {
		"myAge": 5,
		"myBirth": "2021-01-24 14:33:43 370",
		"myName": "小狗"
	},
	"猪": {
		"myAge": 7,
		"myBirth": "2021-01-24 14:33:43 370",
		"myName": "小猪"
	},
	"波斯猫": {
		"myAge": 6,
		"myBirth": "2021-01-24 14:33:43 370",
		"myName": "小猫"
	}
}

多层封装

一般一个请求,都是有请求头和请求体,它们里面又会有各种参数。

现在假如说有一个world世界类,包含了动物Animal类和Persion类,代码如下。

创建一个world.java

@Data
public class World {

    @JSONField(name = "Persion")
    private Persion Persion;

    @JSONField(name = "Animal")
    private Animal Animal;
}

测试

        World world = new World();
        Persion persion = new Persion("张三",18,new Date());

        Animal animal1 = new Animal("小狗",6,new Date());
        world.setPersion(persion);
        world.setAnimal(animal1);

        System.out.println(JSON.toJSONString(world));

输出结果

{
	"Animal": {
		"myAge": 6,
		"myBirth": "2021-01-24 15:32:31 392",
		"myName": "小狗"
	},
	"Persion": {
		"Birth": "2021-01-24 15:32:31 392",
		"age": 18,
		"name": "张三"
	}
}

实际封装的json要比和复杂一些。所以路还是很长的。

你可能感兴趣的:(json,java)