基于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,ArrayList stus){ 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; } publicArrayList getStus(){ returnstus; } publicvoidsetStus(ArrayList stus){ 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;i iterator=jObject1.keys(); //while(iterator.hasNext()){ //Stringkey=iterator.next(); //System.out.println("属性:"+key); //} //2、 //获取数组对象 JSONArrayjArray=newJSONArray(json2); ArrayList list=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(){ ArrayList list=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(){ ArrayList list=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{ ArrayList list=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官方的对类没有要求,剩下的都要求是标准的类,否则无法解析,因为都用到了反射。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。