FastJson序列号和反序列化范例(Java、Scala版)

本文详细介绍了使用FastJson进行序列化和反序列化的操作,包括Java和Scala两个版本。在Java部分,重点讲解了普通对象的序列化、日期的序列化与反序列化,以及反序列化复杂JSON字符串到多类型对象的方法。在Scala部分,涵盖了序列化和反序列化的基本应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. Java版

1.1 序列化

        1.1.1 序列化一个普通对象

        1.1.2 序列化和反序列化日期

1.2 反序列化

1.3 一些其他常用函数

2. Scala版

2.1 序列化

2.2 反序列化


 

1. Java版

1.1 序列化

1.1.1 序列化一个普通对象

存在空值时,有两种处理方法。

// 正常对象
User u = new User();
u.setName("王五");
u.setAge(30);

System.out.println(JSON.toJSONString(u));
// 输出结果 {"age":30,"name":"王五"}
 

// 存在空值的对象
User u1 = new User();
u1.setAge(30);

System.out.println(JSON.toJSONString(u1,SerializerFeature.WriteMapNullValue)); 
// 输出null,输出结果 {"age":30,"name":null}

System.out.println(JSON.toJSONString(u1,SerializerFeature.WriteNullStringAsEmpty)); 
// 输出"",输出结果 {"age":30,"name":""}

1.1.2 序列化和反序列化日期

Date date = new Date();
 
String dateString = JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss");
System.out.println(dateString);
 
// 输出结果 "2018-08-03 09:44:21"
 
String dateString1 = "{\"time\":\"2018-08-01 22:22:22\"}";
System.out.println(JSON.parseObject(dateString1));
 
// 输出结果 {"time":"2018-08-01 22:22:22"}

1.2 反序列化

反序列化一个复杂的JSON字符串。得到一个成员变量包括 string int Object List<Object> 等多种类型的复杂类的对象。

下面是类的声明:

// 课程类
    public class Course {
	    private String courseName;
	    private String code;
 
	    public Course (String courseName, String code){
	        this.setCourseName(courseName);
	        this.setCode(code);
	    }
 
	    public String getCourseName() {
	        return courseName;
	    }
 
	    public void setCourseName(String courseName) {
	        this.courseName = courseName;
	    }
 
	    public String getCode() {
	        return code;
	    }
 
	    public void setCode(String code) {
	        this.code = code;
	    }
	}

// 学生类 
	public class Student {
	    private int id;
	    private String studentName;
	    private int age;
 
	    public Student(int id, String studentName, int age) {
	        this.setId(id);
	        this.setStudentName(studentName);
	        this.setAge(age);
	    }
 
	    public int getId() {
	        return id;
	    }
 
	    public void setId(int id) {
	        this.id = id;
	    }
 
	    public String getStudentName() {
	        return studentName;
	    }
 
	    public void setStudentName(String studentName) {
	        this.studentName = studentName;
	    }
 
	    public int getAge() {
	        return age;
	    }
 
	    public void setAge(int age) {
	        this.age = age;
	    }
	}
 
// 将要序列化的 老师类
// 成员变量包括 string int Object List<Object> 等多种类型。
	public class Teacher {
	    private String teacherName;
	    private int age;
	    private Course course;
	    private List<Student> students;
 
	    public Teacher(String teacherName, int age, Course course, List<Student> students) {
	        this.setTeacherName(teacherName);
	        this.setAge(age);
	        this.setCourse(course);
	        this.setStudents(students);
	    }
 
	    public String getTeacherName() {
	        return teacherName;
	    }
 
	    public void setTeacherName(String teacherName) {
	        this.teacherName = teacherName;
	    }
 
	    public int getAge() {
	        return age;
	    }
 
	    public void setAge(int age) {
	        this.age = age;
	    }
 
	    public Course getCourse() {
	        return course;
	    }
 
	    public void setCourse(Course course) {
	        this.course = course;
	    }
 
	    public List<Student> getStudents() {
	        return students;
	    }
 
	    public void setStudents(List<Student> students) {
	        this.students = students;
	    }
	}

反序列化结果:

String complexJsonString = "{\"teacherName\":\"crystall\",\"age\":27,\"course\":{\"courseName\":\"english\",\"code\":1270},\"students\":[{\"id\":1,\"studentName\":\"lily\",\"age\":12},{\"id\":2,\"studentName\":\"lucy\",\"age\":15}]}";
Teacher teacher = JSON.parseObject(complexJsonString,Teacher.class);

1.3 一些其他常用函数

String jsonString1 = "{\"name\":\"张三\",\"age\":50}";
JSONObject jsonObject = JSON.parseObject(jsonString1);
 
System.out.println(jsonObject.keySet()); // 输出key集合,输出结果 [name, age]
 
if(jsonObject.containsKey("sex")) { // 判断key是否存在,输出结果 false
    System.out.println(true);
} else {
    System.out.println(false);
}
 
jsonObject.put("sex","man"); // 添加k/v键值对,输出结果 {"sex":"man","name":"张三","age":50}
System.out.println(jsonObject);
 
if (jsonObject.containsValue("man")) { // 判断value是否存在,输出结果 false
    System.out.println(true);
} else {
    System.out.println(false);
}

String jsonArrayString1 = "[{\"id\":1,\"studentName\":\"lily\",\"age\":12},{\"id\":2,\"studentName\":\"lucy\",\"age\":15}]";
JSONArray jsonArray = JSON.parseArray(jsonArrayString1);
 
for (int i = 0; i < jsonArray.size(); i++) { // 遍历输出
    JSONObject jsonObj= jsonArray.getJSONObject(i);
    System.out.println(jsonObj.get("id"));
}
 
Student s3 = new Student(3,"学生乙",15);
jsonArray.add(s3); // 添加新jsonobject对象,输出结果 3
System.out.println(jsonArray.size());
 
if(jsonArray.contains(s3)) { // 判断是否存在,输出结果 true
    System.out.println(true);
} else {
    System.out.println(false);
}

2. Scala版

2.1 序列化

val arr = Seq("tom:10", "bob:14", "hurry:9")
val dataRdd = spark.sparkContext.parallelize(arr)
 
val dataString = dataRdd.map(x => {
  val arr = x.split(":")
  val name = arr(0)
  val age = arr(1).toInt
  val u = new User(name,age)
  u
}).map(x => {
  JSON.toJSONString(x,SerializerFeature.WriteMapNullValue)  // 这里需要显示SerializerFeature中的某一个,否则会报同时匹配两个方法的错误
})
 
dataString.foreach(println)
 
// 输出结果
{"age":10,"name":"tom"}
{"age":14,"name":"bob"}
{"age":9,"name":"hurry"}

2.2 反序列化

...待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值