基于JAVA中的四种JSON解析方式详解
我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式。
1、JSON官方
2、GSON
3、FastJSON
4、jackson
JSON操作涉及到的类:
publicclassStudent{
privateintid;
privateStringname;
privateintage;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStudent(intid,Stringname,intage){
super();
this.id=id;
this.name=name;
this.age=age;
}
publicStudent(){
super();
}
@Override
publicStringtoString(){
return"Student[id="+id+",name="+name+",age="+age+"]";
}
}
publicclassGrade{
privateintid;
privateStringname;
privateArrayListstus;
publicGrade(intid,Stringname,ArrayListstus){
super();
this.id=id;
this.name=name;
this.stus=stus;
}
publicGrade(){
super();
}
@Override
publicStringtoString(){
return"Grade[id="+id+",name="+name+",stus="+stus+"]";
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicArrayListgetStus(){
returnstus;
}
publicvoidsetStus(ArrayListstus){
this.stus=stus;
}
}
JSON官方的解析最具有通用性,但是有点小麻烦。
publicclassJSONTest{
//解析JSON
@Test
publicvoidtest1()throwsJSONException{
//对象嵌套数组嵌套对象
Stringjson1="{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘一','age':16}]}";
//数组
Stringjson2="['北京','天津','杭州']";
//1、
//解析第一层---对象
JSONObjectjObject1=newJSONObject(json1);
Gradegrade=newGrade();
grade.setId(jObject1.getInt("id"));
grade.setName(jObject1.getString("name"));
ArrayListstus=newArrayList<>();
grade.setStus(stus);
//解析第二层----数组
JSONArrayjsonArray2=jObject1.getJSONArray("stus");
//遍历数组获取元素----对象
for(inti=0;iiterator=jObject1.keys();
//while(iterator.hasNext()){
//Stringkey=iterator.next();
//System.out.println("属性:"+key);
//}
//2、
//获取数组对象
JSONArrayjArray=newJSONArray(json2);
ArrayListlist=newArrayList<>();
//遍历获取元素
for(inti=0;i
GSON解析是谷歌的,也比较好用
publicclassGSONTest{
//解析
@Test
publicvoidtest1(){
//对象嵌套数组嵌套对象
Stringjson1="{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘一','age':16}]}";
//数组
Stringjson2="['北京','天津','杭州']";
Gsongson=newGson();
//1、
//解析对象:第一个参数:待解析的字符串第二个参数结果数据类型的Class对象
Gradegrade=gson.fromJson(json1,Grade.class);
System.out.println(grade);
//2、
//解析数组要求使用Type
ArrayListlist=gson.fromJson(json2,
newTypeToken>(){}.getType());
System.out.println(list);
}
//生成
@Test
publicvoidtest2(){
ArrayListlist=newArrayList<>();
for(inti=1;i<3;i++){
list.add(newStudent(101+i,"码子",20+i));
}
Gradegrade=newGrade(100001,"张三",list);
Gsongson=newGson();
//将对象转换为诶JSON格式字符串
Stringjson=gson.toJson(grade);
System.out.println(json);
}
}
FastJSON是阿里巴巴的产品,效率最高
publicclassFASTJson{
//解析
@Test
publicvoidtest1(){
//对象嵌套数组嵌套对象
Stringjson1="{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘铭','age':16}]}";
//数组
Stringjson2="['北京','天津','杭州']";
//1、
//静态方法
Gradegrade=JSON.parseObject(json1,Grade.class);
System.out.println(grade);
//2、
Listlist=JSON.parseArray(json2,String.class);
System.out.println(list);
}
//生成
@Test
publicvoidtest2(){
ArrayListlist=newArrayList<>();
for(inti=1;i<3;i++){
list.add(newStudent(101+i,"码子",20+i));
}
Gradegrade=newGrade(100001,"张三",list);
Stringjson=JSON.toJSONString(grade);
System.out.println(json);
}
}
jackSon解析JSON,SpringMVC内置的解析器就是这个
publicclassJackSonTest{
//解析
@Test
publicvoidtest1()throwsException{
//对象嵌套数组嵌套对象
Stringjson1="{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘一\",\"age\":16}]}";
//数组
Stringjson2="[\"北京\",\"天津\",\"杭州\"]";
//1、
ObjectMappermapper=newObjectMapper();
Gradegrade=mapper.readValue(json1,Grade.class);
System.out.println(grade);
//2、
ArrayListlist=mapper.readValue(json2,
newTypeReference>(){
});
System.out.println(list);
}
//生成
@Test
publicvoidtest2()throwsJsonProcessingException{
ArrayListlist=newArrayList<>();
for(inti=1;i<3;i++){
list.add(newStudent(101+i,"码子",20+i));
}
Gradegrade=newGrade(100001,"张三",list);
ObjectMappermapper=newObjectMapper();
//将对象转换为JSON格式字符串
Stringjson=mapper.writeValueAsString(grade);
System.out.println(json);
}
}
除了JSON官方的对类没有要求,剩下的都要求是标准的类,否则无法解析,因为都用到了反射。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。