Android 之 json数据的解析(jsonReader)
json数据的解析相对而言,还是比较容易的,实现的代码也十分简单。这里用的是jsonReade方法来进行json数据解析。
1.在解析之前,大家需要知道什么是json数据。
json数据存储的对象是无序的“名称/值”对的集合。和其他的数据存储方式相比,json数据的可读性,可扩展性,编码难度,解码难度都有一定的优势。在json数据中,
对于一个对象:
(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。
(2)每个“名称”后跟一个“:”(冒号);
(3)“‘名称/值’对”之间使用“,”(逗号)分隔。
对于一个数组:
(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。
(2)值之间使用“,”(逗号)分隔。
下面是android官方给出的一组json数据示例:
[{"id":912345678901,"text":"HowdoIreadJSONonAndroid?","geo":null,"user":{"name":"android_newb","followers_count":41}},{"id":912345678902,"text":"@android_newbjustuseandroid.util.JsonReader!","geo":[50.454722,-104.606667],"user":{"name":"jesse","followers_count":2}}]
在代码中,如果直接定义json数据,需要在代码中对“ 使用 \ 转义。上面json在代码中的形式为:(在java代码中,创建一段json数据,“ 符号需要转义)
privateStringjsonDate="["+"{\"id\":912345678901,"+"\"text\":\"HowdoIreadJSONonAndroid?\","+"\"geo\":null,"+"\"user\":{\"name\":\"android_newb\",\"followers_count\":41}},"+"{\"id\":912345678902,"+"\"text\":\"@android_newbjustuseandroid.util.JsonReader!\","+"\"geo\":[50.454722,-104.606667],"+"\"user\":{\"name\":\"jesse\",\"followers_count\":2}}"+"]";
1. 使用JsonReader方法解析Json数据对象,你需要创建一个JsonReader对象.
2.然后使用beginArray()来开始解析 [ 左边的第一个数组。
3.再使用beginObject()来开始解析数组{中的第一个对象。
4.对于直接的数据可以直接得到解析到的数据,但对于在json中嵌套了数组的数据,需要在写一个解析方法。
5.在解析完成后,别忘用endArray(),endObject()来关闭解析。
packagecom.mecury.jsontest;importjava.io.IOException;importjava.io.StringReader;importandroid.util.JsonReader;importandroid.util.JsonToken;publicclassJsonUtils{publicvoidparseJson(StringjsonDate)throwsIOException{//创建JsonReader对象JsonReaderjsReader=newJsonReader(newStringReader(jsonDate));jsReader.beginArray();while(jsReader.hasNext()){readMessage(jsReader);}jsReader.endArray();}publicvoidreadMessage(JsonReaderjsReader)throwsIOException{jsReader.beginObject();while(jsReader.hasNext()){StringtagName=jsReader.nextName();if(tagName.equals("id")){System.out.println("name:"+jsReader.nextLong());}elseif(tagName.equals("text")){System.out.println("text:"+jsReader.nextString());}elseif(tagName.equals("geo")&&jsReader.peek()!=JsonToken.NULL){readDoubleArray(jsReader);}elseif(tagName.equals("user")){readUser(jsReader);}else{//跳过当前值jsReader.skipValue();System.out.println("skip======>");}}jsReader.endObject();}//解析geo中的数据publicvoidreadDoubleArray(JsonReaderjsReader)throwsIOException{jsReader.beginArray();while(jsReader.hasNext()){System.out.println(jsReader.nextDouble());}jsReader.endArray();}//由于读取user中的数据publicvoidreadUser(JsonReaderjsReader)throwsIOException{StringuserName=null;intfollowsCount=-1;jsReader.beginObject();while(jsReader.hasNext()){StringtagName=jsReader.nextName();if(tagName.equals("name")){userName=jsReader.nextString();System.out.println("user_name:"+userName);}elseif(tagName.equals("followers_count")){followsCount=jsReader.nextInt();System.out.println("followers_count:"+followsCount);}}jsReader.endObject();}}
对上面的内容解析的输出:
11-2206:59:52.441:I/System.out(5329):name:91234567890111-2206:59:52.441:I/System.out(5329):text:HowdoIreadJSONonAndroid?11-2206:59:52.461:I/System.out(5329):skip======>11-2206:59:52.461:I/System.out(5329):user_name:android_newb11-2206:59:52.471:I/System.out(5329):followers_count:4111-2206:59:52.481:I/System.out(5329):name:91234567890211-2206:59:52.491:I/System.out(5329):text:@android_newbjustuseandroid.util.JsonReader!11-2206:59:52.500:I/System.out(5329):50.45472211-2206:59:52.500:I/System.out(5329):-104.60666711-2206:59:52.510:I/System.out(5329):user_name:jesse11-2206:59:52.510:I/System.out(5329):followers_count:2
以上!另外对APP进行在线全方位的安全性、兼容性测试,我都会用这个:www.ineice.com。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。