浅谈Gson和FastJson解析JSON1-2Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.2JSON定义和特点定义:JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式特点:1、JSON采用完全独立于语言的文本格式2、JavaScript的一个子集3、易于人阅读和编写,同时也易于机器解析和生成1-3Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.3JSON语法规则JSON语法是JavaScript对象表示语法的子集。1.数据在名称/值对中2.数据由逗号分隔3.花括号保存对象4.方括号保存数组1-4Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.4JSON名称/值对JSON数据的书写格式是:名称/值对。名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:“firstName”:”John”这很容易理解,等价于这条JavaScript语句:“firstName”=”John”1-5Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.5JSON值1.数字(整数或浮点数)2.字符串(在双引号中)3.逻辑值(true或false)4.数组(在方括号中)5.对象(在花括号中)6.null1-6Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.6JSON结构有两种结构javascript中的对象和数组1、对象:对象在js中表示为“{}”括起来的内容数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key获取属性值。2、数组:数组在js中是中括号“[]”括起来的内容数据结构为[java,javascript,vb,...],取值方式和所有语言中一样,使用索引获取。经过对象、数组2种结构就可以组合成复杂的数据结构了。1-7Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.7JSON用途JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序1-8Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.8示例表示一个人的对象:{姓名:大憨,年龄:24}一组学生1-9Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.9JSON和XML的比较XML格式:?xmlversion=1.0encoding=utf-8?countryname中国/nameprovincename黑龙江/namecitiescity哈尔滨/citycity大庆/city/cities/provinceprovincename广东/namecitiescity广州/citycity深圳/citycity珠海/city/cities/province/countryJSON格式:{name:中国,province:[{name:黑龙江,cities:{city:[哈尔滨,大庆]}},{name:广东,cities:{city:[广州,深圳,珠海]}}]}1-10Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.101-11Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.11JSON程序中之应用三者JSON解析方法:1.JSON之Java解析2.JSON之GSON解析3.JSON之FastJson解析4.JSON之JS解析1-12Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.12java解析JSONjson需要的jarcommons-beanutils-1.7.0.jarcommons-collections-3.2.jarcommons-httpclient-3.0.jarcommons-lang-2.4.jarcommons-logging-api-1.1.jarezmorph-1.0.3.jarjson-lib-2.2.3-jdk15.jar1-13Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.13java解析JSON构造JSON对象转换字符串JSONObjectjson=newJSONObject();json.put(姓名,张三);json.put(成绩,90);System.out.println(json.toString());将对象数据转换成json字符串Useruser1=newUser();user1.setName(zhangsan);user1.setAge(20);JSONObjectjobj=JSONObject.fromObject(user1);System.out.println(jobj.toString());1-14Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.14java解析JSON将对象集合转换成json字符串ArrayListal=newArrayList();for(inti=0;i3;i++){Useruser1=newUser();user1.setName(zhangsan);user1.setAge(20);al.add(user1);}JSONArrayjarr=JSONArray.fromObject(al);System.out.println(jarr.toString());1-15Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.15java解析JSON将json数组转换成对象JSONArrayjarr=JSONArray.fromObject(al);System.out.println(jarr.toString());for(inti=0;ijarr.size();i++){JSONObjectjobj=jarr.getJSONObject(i);Useruser=(User)JSONObject.toBean(jobj,User.class);System.out.println(user.getName());}1-16Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.16客户端将json字符串转换为相应的javaBean//将json字符串转换为json对象jsonObj=newJSONObject(jsonStr);//得到指定jsonkey对象的value对象JSONArraypersonList=jsonObj.getJSONArray(persons);//遍历jsonArrayfor(inti=0;ipersonList.length();i++){//获取每一个json对象JSONObjectjsonItem=personList.getJSONObject(i);//获取每一个json对象的值Personperson=newPerson();person.setId(jsonItem.getInt(id));person.setName(jsonItem.getString(name));person.setAddress(jsonItem.getString(address));list.add(person);1-17Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.17JSON之GSON解析谷歌GSONJava类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象1-18Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.18JSON之GSON解析服务器端将数据转换成json字符串服务器端项目要导入Gson的jar包到BuiltPath中。Gson的jar:我们还可以下载gson的帮助文档1-19Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.19JSON之GSON解析将对象数据转为json字符串,核心函数是:ArrayListal=newArrayList();for(inti=0;i3;i++){Useruser1=newUser();user1.setName(zhangsan+i);user1.setAge(20+i);al.add(user1);}Gsongson=newGson();Stringstr=gson.toJson(al);System.out.println(str);要导入gson的两个jar包,json的jar就不需要导入了,因为android项目中已经集成了json的jar包所以这里无需导入1-20Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.20JSON之GSON解析简单对象转化Useru=gson.fromJson(str,User.class);带泛型的List转化ArrayListUseruser=gson.fromJson(str,newTypeTokenListUser(){}.getType());1-21Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.21JSON之FastJson解析fastjson是一个性能很好的Java语言实现的JSON解析器和生成器,来自阿里巴巴的工程师开发。主要特点:1.快速FAST(比其它任何基于Java的解析器和生成器更快,包括jackson)2.强大(支持普通JDK类包括任意JavaBeanClass、Collection、Map、Date或enum)3.零依赖(没有依赖其它任何类库除了JDK)1-22Confidential©2013iSoftStoneHoldingsLimited.AllRightsReserved.22fastJSON服务器端将数据转换成json字符串首先、服务器端项目要导入阿里巴巴的fastjson的jar包至builtPath路径下(这些可以到fastjson官网下载:)然后将数据转为json字符串,核心函数是:publ