加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FastJson的简单使用

发布时间:2020-12-16 18:53:51 所属栏目:百科 来源:网络整理
导读:pom.xml文件中加入依赖依赖:dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.15/version/dependency 首先建立两个实体类,Student.Java和 Teacher.java Student.java 和Teacher.java 的代码如下: publicclassStudent{privat
pom.xml文件中加入依赖依赖:
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.15</version>
</dependency>

首先建立两个实体类,Student.Java和 Teacher.java

Student.java 和Teacher.java 的代码如下:

publicclassStudent{

privateintid;
privateStringname;
privateintage;

/**
*默认的构造方法必须不能省,不然不能解析
*/

publicStudent(){

}
publicStudent(intid,Stringname,intage){
this.id=id;
this.name=name;
this.age=age;
}

publicintgetId(){
returnid;
}

publicvoidsetId(intid){
this.id=id;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicintgetAge(){
returnage;
}

publicvoidsetAge(intage){
this.age=age;
}

@Override
publicStringtoString(){
return"Student[id="+id+",name="+name+",age="+age+"]";
}

}


importjava.util.List;

publicclassTeacher{

privateintid;
privateStringname;

privateList<Student>students;


/**
*默认的构造方法必须不能省,不然不能解析
*/
publicTeacher(){

}
publicTeacher(intid,Stringname){
this.id=id;
this.name=name;
}

publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}

publicList<Student>getStudents(){
returnstudents;
}
publicvoidsetStudents(List<Student>students){
this.students=students;
}
@Override
publicStringtoString(){
return"Teacher[id="+id+",mStudents="
+students+"]";
}


}


上面 的代码比较简单,主要就几个属性,这里值得注意的是, 默认的构造函数一定要写,不然是无法解析的。(对于fastjson 严格按照JavaBean的规范来,有一点不对就无法解析,这里一定要切记,每一个实体类的属性的get,set 方法必须写,切方法第四个字母必须大写,最好使用Eclipse的source->genreal setters and getters 生成get,set 方法,切记,切记 )。对于Gson 这里就没有这么多的要求了,但最好还是按照JavaBean来写,避免一些位置的错误。


首先看 fastjson 的解析

首先解析一个实体类为json 格式。

Studentstudent=newStudent(0,"Aaron",24);
System.out.println(JSON.toJSONString(student));


输出结果为:{"age":24,"id":0,"name":"Aaron"}


输出的json格式与我们的Student中定义的属性其实是不一致的,这个其实不影响我们生成以及后面的解析,因为他有严格的get和set方法定义。

更复杂一点的数据类型也可以很方便的使用JSON.toJsonString(Object o) 这个方法进行解析成json格式。

List<Student>students=newArrayList<Student>();
for(inti=0;i<5;i++){
Studentstu=newStudent(i,"Student"+i,18+i);
students.add(stu);
}

解析结果为:

[{"age":18,"name":"Student0"},{"age":19,"id":1,"name":"Student1"},{"age":20,"id":2,"name":"Student2"},{"age":21,"id":3,"name":"Student3"},{"age":22,"id":4,"name":"Student4"}]

我们来看看更复杂一点的结构。我们将一个Teacher 列表来解析,一个Teacher对象中是包含Student 列表的这个也在我们常用的数据模型,下面看看代码:

List<Teacher>teaList=newArrayList<Teacher>();
longtime=System.currentTimeMillis();
for(inti=0;i<10;i++){
Teacherteacher=newTeacher(i,"Teacher"+i);
List<Student>stus=newArrayList<Student>();
for(intj=0;j<4;j++){
Students=newStudent(j,"Student"+j,18+j);
stus.add(s);
}
teacher.setStudents(stus);
teaList.add(teacher);
}
StringjsonTeach=JSON.toJSONString(teaList);
System.out.println("fastjson="+jsonTeach);

结果为:

fastjson=[{"id":0,"name":"Teacher0","students":[{"age":18,"name":"Student1"}]},{"id":1,"name":"Teacher1",{"id":2,"name":"Teacher2",{"id":3,"name":"Teacher3","name":"Student1"}]}]

还是一个简单的函数而已,就能办到。

这个还有toJSONString重载的方法,有很多,在给一个就是可以按照标准的json格式输出,上面的输出都不规范,我们来看看。

Studentstudent=newStudent(0,24);
System.out.println(JSON.toJSONString(student,true));
输出为:
{
"age":24,"name":"Aaron"
}


如果我们想要将实体类中的某个字段或某几个不进行解析呢?那么我们可以使用transient 关键字,来标记它为不需要的,在fastjson中还提供了一种便捷的方法来自定义我们需要序列化的字段,

SimplePropertyPreFilterfilter=newSimplePropertyPreFilter(实体类.class,"字段1","字段2");字段为我们需要序列化的字段,如果实体类中没有改字段则不解析放弃该字段而不会报错。

如下:

SimplePropertyPreFilterfilter=newSimplePropertyPreFilter(Student.class,"id","age");
StringjsonStu=JSON.toJSONString(students,filter);

下面进行fastjson 的反序列化,这个也是很常用的功能,

还是拿最简单的来进行示范,

Studentstudent=newStudent(0,24);
Stringstr=JSON.toJSONString(student,true);
System.out.println(JSON.parSEObject(str,Student.class));


反序列化主要使用的是JSON.parSEObject(str,class); 它就能把我们的str 转化为class 类型的对象,当然还有更复杂的对象,比如:

List<Student>students=newArrayList<Student>();
for(inti=0;i<5;i++){
Studentstu=newStudent(i,18+i);
students.add(stu);
}
//过滤哪些属性需要转换
//SimplePropertyPreFilterfilter=newSimplePropertyPreFilter(Student.class,"age");
//StringjsonStu=JSON.toJSONString(students,filter);
StringjsonStu=JSON.toJSONString(students);
System.out.println(jsonStu);

List<Student>stu=JSON.parSEObject(jsonStu,newTypeReference<List<Student>>(){});
for(inti=0;i<stu.size();i++)
{
System.out.println(stu.get(i));
}


前面就是添加数据,然后在后面解析为json格式,然后在转化为类的对象,这里转为List<Student> 对象,主要用到new TypeReference<数据返回类型> (){},我们使用的就是new TypeReference<List<Student>>(){} 返回的结果就是List<Student> 也不需要强制转化,我们看看上面输出的结果为:

Student[id=0,name=Student0,age=18]
Student[id=1,name=Student1,age=19]
Student[id=2,name=Student2,age=20]
Student[id=3,name=Student3,age=21]
Student[id=4,name=Student4,age=22]


附带,fastjson对时间的操作:

Datedate=newDate();
//输出毫秒值
System.out.println(JSON.toJSONString(date));
//默认格式为yyyy-MM-ddHH:mm:ss
System.out.println(JSON.toJSONString(date,SerializerFeature.WriteDateUseDateFormat));
//根据自定义格式输出日期
System.out.println(JSON.toJSONStringWithDateFormat(date,"yyyy-MM-dd",SerializerFeature.WriteDateUseDateFormat));

输出结果:

1476085821568
"2016-10-1015:50:21"
"2016-10-10"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读