300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android中的JSON解析方式:json; Gson ; Fastjson

Android中的JSON解析方式:json; Gson ; Fastjson

时间:2021-04-30 16:09:42

相关推荐

Android中的JSON解析方式:json; Gson ; Fastjson

本文主要介绍Json数据的解析

----a,json数据的介绍

----b,json数据的解析

----c,gson数据的解析,谷歌公司的一种格式

----d,fastjson数据的解析,阿里巴巴的一种格式

通过本文的学习能掌握json数据格式的解析,为以后json格式数据的解析做到熟练于心。

Json的全称:JavaScript Object Notation

JSON的定义:

一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 –

Json建构于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)

JSON对象是一个无序的“‘名称/值’对”集合。

一个对象以“{”(左括号)开始,“}”(右括号)结束。

每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

如: {

“name”:”jackson”,

“age”:100

}

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔

如:{

“students”:

[

{“name”:”jackson”,“age”:100},

{“name”:”michael”,”age”:51}

]

}

一。谷歌GSON技术的介绍

Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。

Gson支持任意复杂Java对象包括没有源代码的对象。

二。阿里巴巴FastJson技术的介绍

FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:

速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson。

功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省。

无依赖,能够直接运行在Java SE 5.0以上版本

支持Android。

开源 (Apache 2.0)

三。JSON Vs XML

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

6.JSON的速度要远远快于XML

四。android2.3提供的json解析类

android的json解析部分都在包org.json下,主要有以下几个类:

JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External: 应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!"),在Key和Value之间是以逗号","分隔。Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。

JSONStringer:json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。

JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如: [value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为, get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

JSONTokener:json解析类

JSONException:json中用到的异常

首先建立一个公共的Bean

[java]view plaincopypackagecom.qianfeng.domain; publicclassPerson{ privateintage; privateStringname; publicPerson(intage,Stringname){ super(); this.age=age; this.name=name; } @Override publicStringtoString(){ return"Person[age="+age+",name="+name+"]"; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicPerson(){ //TODOAuto-generatedconstructorstub } }

第一种方式:

Json方式:

[java]view plaincopypublicclassJsonList{ publicJsonList(){ //TODOAuto-generatedconstructorstub } publicstaticList<Person>getList(){ List<Person>list=newArrayList<Person>(); list.add(newPerson(1002,"李四2")); list.add(newPerson(1003,"李四3")); list.add(newPerson(1001,"李四1")); returnlist; } publicstaticPersongetPerson(){ returnnewPerson(1002,"李四2"); } }

[java]view plaincopyimportnet.sf.json.JSON; importnet.sf.json.JSONArray; importnet.sf.json.JSONObject; importnet.sf.json.JSONSerializer; publicclassJsonTools{ publicJsonTools(){ //TODOAuto-generatedconstructorstub } publicstaticStringgetString(Personperson){ JSONjson=JSONSerializer.toJSON(JsonList.getPerson()); returnjson.toString(); } /** * *@parammsgString *@return */ publicstaticPersongetPerson(StringmsgString){ Personperson=newPerson(); JSONArrayarray=newJSONArray(); array.add(msgString); JSONObjectobj=array.getJSONObject(0); //System.out.println(obj.get("age")); //System.out.println(obj.get("name")); person.setAge(obj.getInt("age")); person.setName(obj.getString("name")); returnperson; } publicstaticStringgetListString(List<Person>listPersons){ JSONjson=JSONSerializer.toJSON(listPersons); returnjson.toString(); }/** *将一个json格式的字符串转换成行对应的对象 *@paramstr *@return */ publicstaticList<Person>getPersons(Stringstr){ List<Person>list=newArrayList<Person>(); JSONArrayarray=newJSONArray(); array.add(str); JSONArrayarray2=array.getJSONArray(0); for(inti=0;i<array2.size();i++){ JSONObjectjsonObject=array2.getJSONObject(i); Personperson=newPerson(); person.setAge(jsonObject.getInt("age")); person.setName(jsonObject.getString("name")); list.add(person); } returnlist; } /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub //JSONjson=JSONSerializer.toJSON(JsonList.getList()); //System.out.println(getString(newPerson(23,"jack"))); //System.out.println(getPerson("{'age':1002,'name':'李四2'}").toString()); //System.out.println(getListString(JsonList.getList())); StringmsgString="[{'age':1002,'name':'李四2'},{'age':1003,'name':'李四3'},{'age':1001,'name':'李四1'}]"; List<Person>lPersons=getPersons(msgString); for(Personp:lPersons){ System.out.println(p.toString()); } } }

第二种方式:

Gson方式

[java]view plaincopyimportjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importcom.android.domain.Person; importcom.google.gson.Gson; importcom.google.gson.reflect.TypeToken; publicclassGsonTools{ publicGsonTools(){ //TODOAuto-generatedconstructorstub } publicstaticStringcreateGsonString(Objectobject){ Gsongson=newGson(); StringgsonString=gson.toJson(object); returngsonString; } publicstatic<T>TchangeGsonToBean(StringgsonString,Class<T>cls){ Gsongson=newGson(); Tt=gson.fromJson(gsonString,cls); returnt; } publicstatic<T>List<T>changeGsonToList(StringgsonString,Class<T>cls){ Gsongson=newGson(); List<T>list_person=gson.fromJson(gsonString, newTypeToken<List<T>>(){ }.getType()); returnlist_person; } publicstaticList<Map<String,Object>>changeGsonToListMaps(StringgsonString){ List<Map<String,Object>>list=null; Gsongson=newGson(); list=gson.fromJson(gsonString, newTypeToken<List<Map<String,Object>>>(){ }.getType()); returnlist; } /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub //Personperson1=newPerson("张三1",24,"北京1"); //Personperson2=newPerson("张三2",23,"北京2"); //List<Person>list=newArrayList<Person>(); //list.add(person1); //list.add(person2); // //StringgsonString=createGsonString(list); //System.out.println(gsonString); //Gsongson=newGson(); //List<Person>list_person=changeGsonToList(gsonString,Person.class); //System.out.println(list_person.toString()); //Personpp=changeGsonToBean(gsonString,Person.class); //System.out.println(pp); List<Map<String,Object>>list=newArrayList<Map<String,Object>>(); Map<String,Object>map=newHashMap<String,Object>(); map.put("name","jack"); map.put("age",23); Map<String,Object>map2=newHashMap<String,Object>(); map2.put("name","rose"); map2.put("age",24); list.add(map); list.add(map2); StringgsonString=createGsonString(list); System.out.println(gsonString); List<Map<String,Object>>list2=changeGsonToListMaps(gsonString); System.out.println(list2.toString()); } }

第三种方式:

fastJosn方式

[java]view plaincopyimportjava.util.ArrayList; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importcom.alibaba.fastjson.JSON; importcom.alibaba.fastjson.TypeReference; importcom.alibaba.fastjson.asm.Type; importcom.alibaba.fastjson.util.TypeUtils; publicclassFastJsonTools{ publicFastJsonTools(){ //TODOAuto-generatedconstructorstub } publicstaticStringcreateJsonString(Objectobject){ StringjsonString=JSON.toJSONString(object); returnjsonString; } publicstatic<T>TcreateJsonBean(StringjsonString,Class<T>cls){ Tt=JSON.parseObject(jsonString,cls); returnt; } publicstatic<T>List<T>createJsonToListBean(StringjsonString, Class<T>cls){ List<T>list=null; list=JSON.parseArray(jsonString,cls); returnlist; } /** *@paramjsonString *@return */ publicstaticList<Map<String,Object>>createJsonToListMap( StringjsonString){ List<Map<String,Object>>list2=JSON.parseObject(jsonString, newTypeReference<List<Map<String,Object>>>(){ }); returnlist2; } /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub //Personperson1=newPerson("张三1",24,"北京1"); //Personperson2=newPerson("张三2",23,"北京2"); //List<Person>list=newArrayList<Person>(); //list.add(person1); //list.add(person2); List<Map<String,Object>>list=newArrayList<Map<String,Object>>(); Map<String,Object>map=newHashMap<String,Object>(); map.put("name","jack"); map.put("age",23); Map<String,Object>map2=newHashMap<String,Object>(); map2.put("name","rose"); map2.put("age",24); list.add(map); list.add(map2); StringjsonString=JSON.toJSONString(list); System.out.println(jsonString); //JSON.parseArray(arg0,arg1) List<Map<String,Object>>list2=JSON.parseObject(jsonString, newTypeReference<List<Map<String,Object>>>(){ }); //List<Person>lists=JSON.parseArray(arg0,arg1); System.out.println(list2.toString()); } }

示例下载

示例下载

参考网址

json官网

google-gson

博客一

=======================================================================================================================

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

[java]view plaincopy/** *获取"数组形式"的JSON数据, *@parampath网页路径 *@return返回JSONArray *@throwsException */ publicstaticStringgetJSONArray(Stringpath)throwsException{ Stringjson=null; URLurl=newURL(path); //利用HttpURLConnection对象,我们可以从网络中获取网页数据. HttpURLConnectionconn=(HttpURLConnection)url.openConnection(); //单位是毫秒,设置超时时间为5秒 conn.setConnectTimeout(5*1000); //HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET conn.setRequestMethod("GET"); if(conn.getResponseCode()==200){//判断请求码是否是200码,否则失败 InputStreamis=conn.getInputStream();//获取输入流 byte[]data=readStream(is);//把输入流转换成字符数组 json=newString(data);//把字符数组转换成字符串 //JSONArrayjsonArray=newJSONArray(json);//用android提供的框架JSONArray读取JSON数据,转换成Array } returnjson; }

该方法返回解析到的json数据(例:[{"ID":11,"uid":67,"carNo":"豫A000V1"},{"ID":12,"uid":67,"carNo":"豫A9E592"},{"ID":16,"uid":67,"carNo":"豫A1E238"}])

然后就可以解析你想要的字段了

[java]view plaincopyJSONArrayjsonArray=newJSONArray(carIdJSON); for(inti=0;i<jsonArray.length();i++){ JSONObjectjsonObject=jsonArray.getJSONObject(i); jsonObject.getString("carNo"); jsonObject.getString("ID"); }

有解析就有上传了(POST上传),json的上传要用NameValuePairs,大家可以查看jdk关于NameValuePairs的解释

NameValuePairs只能传String类型的值

nameValuePairs.add(new BasicNameValuePair("xxx", xxx)); 复制代码 可以上传很多字段(按需求上传就行了)

下面就是上传的方法

// 1. 使用POST方式时,传递参数必须使用NameValuePair数组

// 2. 使用GET方式时,通过URL传递参数,注意写法

// 3. 通过setEntity方法来发送HTTP请求

// 4. 通过DefaultHttpClient 的 execute方法来获取HttpResponse

// 5. 通过getEntity()从Response中获取内容

public static int httpPostData(String urlString,List<NameValuePair> nameValuePairs){

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost(urlString);

try{

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);

int statusCode = response.getStatusLine().getStatusCode();

return statusCode;

}catch(Exception e){

e.printStackTrace();

}

return 0;

} 复制代码 方法返回请求服务器,返回的响应参数

200成功

200服务器出错

404服务器没响应(服务器有问题)

/forum.php?mod=viewthread&tid=165428&reltid=227908&pre_thread_id=0&pre_pos=2&ext=CB

/forum.php?mod=viewthread&tid=276713

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。