Android之json数据的解析(jsonReader)-创新互联

json数据的解析相对而言,还是比较容易的,实现的代码也十分简单。这里用的是jsonReade方法来进行json数据解析。

成都创新互联-专业网站定制、快速模板网站建设、高性价比禄丰网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式禄丰网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖禄丰地区。费用合理售后完善,十余年实体公司更值得信赖。

1.在解析之前,大家需要知道什么是json数据。

json数据存储的对象是无序的“名称/值”对的集合。和其他的数据存储方式相比,json数据的可读性,可扩展性,编码难度,解码难度都有一定的优势。在json数据中,

对于一个对象:

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

(2)每个“名称”后跟一个“:”(冒号);

(3)“‘名称/值’对”之间使用“,”(逗号)分隔。

对于一个数组:

(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。

(2)值之间使用“,”(逗号)分隔。

下面是android官方给出的一组json数据示例:

[
   {
    "id": 912345678901,
    "text": "How do I read JSON on Android?",
    "geo": null,
    "user": {
       "name": "android_newb",
      "followers_count": 41
    } 
   },
   {
    "id": 912345678902,
    "text": "@android_newb just useandroid.util.JsonReader!",
    "geo": [50.454722, -104.606667],
    "user": {
      "name": "jesse",
      "followers_count": 2
    }
   }
 ]

在代码中,如果直接定义json数据,需要在代码中对“ 使用 \ 转义。上面json在代码中的形式为:(在java代码中,创建一段json数据,“ 符号需要转义)

private String jsonDate = "["
           + "{\"id\": 912345678901,"
           + "\"text\":\"How do I read JSON onAndroid?\","
            + "\"geo\":null,"
           +"\"user\":{\"name\":\"android_newb\",\"followers_count\":41}},"
           + "{\"id\": 912345678902,"
           + "\"text\":\"@android_newb just useandroid.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()来关闭解析。

package com.mecury.jsontest;
 
import java.io.IOException;
import java.io.StringReader;
import android.util.JsonReader;
import android.util.JsonToken;
public class JsonUtils {
 
   public void parseJson(String jsonDate) throws IOException{
           //创建JsonReader对象
           JsonReader jsReader = new JsonReader(new StringReader(jsonDate));
           jsReader.beginArray();
           while (jsReader.hasNext()) {
               readMessage(jsReader);
           }
           jsReader.endArray();
   
    }
   
       public void readMessage(JsonReader jsReader) throws IOException{
           jsReader.beginObject();
           while(jsReader.hasNext()){
                String tagName =jsReader.nextName();
                if(tagName.equals("id")) {
                   System.out.println("name:"+jsReader.nextLong());
                }else if(tagName.equals("text")) {
                   System.out.println("text:"+jsReader.nextString());
                }else if(tagName.equals("geo") && jsReader.peek()!=JsonToken.NULL) {
                    readDoubleArray(jsReader);
                }else if(tagName.equals("user")) {
                    readUser(jsReader);
               }else {
                    //跳过当前值
                    jsReader.skipValue();
                   System.out.println("skip======>");
                }
           }
           jsReader.endObject();
       }
       //解析geo中的数据
       public void readDoubleArray(JsonReader jsReader) throws IOException{
           jsReader.beginArray();
           while(jsReader.hasNext()){
               System.out.println(jsReader.nextDouble());
           }
           jsReader.endArray();
       }
       //由于读取user中的数据
       public void readUser(JsonReader jsReader) throws IOException{
       String userName = null;
       int followsCount = -1;
       jsReader.beginObject();
       while (jsReader.hasNext()) {
           String tagName = jsReader.nextName();
           if (tagName.equals("name")) {
                userName =jsReader.nextString();
               System.out.println("user_name:"+ userName);
           }else if (tagName.equals("followers_count")) {
                followsCount = jsReader.nextInt();
               System.out.println("followers_count:"+followsCount);
           }
       }
       jsReader.endObject();
    }
}

对上面的内容解析的输出:

11-22 06:59:52.441: I/System.out(5329):name:912345678901
11-22 06:59:52.441: I/System.out(5329):text:How do I read JSON on Android?
11-22 06:59:52.461: I/System.out(5329):skip======>
11-22 06:59:52.461: I/System.out(5329):user_name:android_newb
11-22 06:59:52.471: I/System.out(5329):followers_count:41
11-22 06:59:52.481: I/System.out(5329):name:912345678902
11-22 06:59:52.491: I/System.out(5329):text:@android_newb just use android.util.JsonReader!
11-22 06:59:52.500: I/System.out(5329):50.454722
11-22 06:59:52.500: I/System.out(5329):-104.606667
11-22 06:59:52.510: I/System.out(5329):user_name:jesse
11-22 06:59:52.510: I/System.out(5329):followers_count:2

以上!另外对APP进行在线全方位的安全性、兼容性测试,我都会用这个:www.ineice.com。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:Android之json数据的解析(jsonReader)-创新互联
转载注明:http://scyanting.com/article/pcpsd.html