接上文

七、通过JSONTokener来解析json文本 7.1、将json文本解析为对象 我们可以通过 JSONTokener的nextValue()来获得JSONObject对象,然后再通过JSONObject对象来做进一步的解析。 实例4
      

  void startJSONTokenerDemo (){         final String JSON =                    "{" +                       "   \"phone\" : [\"12345678\", \"87654321\"]," +                       "   \"name\" : \"yuanzhifei89\"," +                       "   \"age\" : 100," +                       "   \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +                       "   \"married\" : false," +                   "}" ;                                      try {                       JSONTokener jsonTokener = new JSONTokener ( JSON );                       /* 此时还未读取任何json文本,直接读取就是一个JSONObject对象。                                                        如果此时的读取位置在"name" : 了,那么nextValue就是"yuanzhifei89"(String)                       */                     JSONObject person = ( JSONObject ) jsonTokener . nextValue ();                       /* 接下来的就是JSON对象的操作了 */                       person . getJSONArray ( "phone" );                       person . getString ( "name" );                       person . getInt ( "age" );                       person . getJSONObject ( "address" );                       person . getBoolean ( "married" );                   } catch ( JSONException ex ) {                       /*异常处理代码  */                 }         }

7.2、将json文本解析为文本 我们可以通过 JSONTokener的一些方法将json文本解析为文本 实例5
      

  void startJSONTokenerDemo2 (){         final String JSON =                    "{" +                       "   \"phone\" : [\"12345678\", \"87654321\"]," +                       "   \"name\" : \"yuanzhifei89\"," +                       "   \"age\" : 100," +                       "   \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +                       "   \"married\" : false," +                   "}" ;                              try {               JSONTokener jsonTokener = new JSONTokener ( JSON );               /* 继续向下读json文本中的8个字符。此时刚开始,即在{处  */             Log . i ( tag , "jsonTokener.next(8)|" + jsonTokener . next ( 8 ));             /* 继续向下读json文本中的1个字符  */             Log . i ( tag , "jsonTokener.next()|" + jsonTokener . next ());             /* 继续向下读取一个json文本中的字符。该字符不是空白、同时也不是注释中的字符  */             Log . i ( tag , "jjsonTokener.nextClean()|" + jsonTokener . nextClean ());               /* 返回当前的读取位置到第一次遇到'a'之间的字符串(不包括a)。  */             Log . i ( tag , "jsonTokener.nextString('a')|" + jsonTokener . nextString ( 'a' ));             /* 返回当前读取位置到第一次遇到字符串中(如"0089")任意字符之间的字符串,同时该字符是trimmed的。(此处就是第一次遇到了89)*/               Log . i ( tag , "jsonTokener.nextTo(\"0089\")|" + jsonTokener . nextTo ( "0089" ) );             /* 读取位置回退一个  */             jsonTokener . back ();               Log . i ( tag , "jsonTokener.back()" );             Log . i ( tag , "jsonTokener.next()|" + jsonTokener . next ());             /* 读取位置前进到指定字符串处(包括字符串)*/               jsonTokener . skipPast ( "address" );               Log . i ( tag , "skipPast(\"address\")" );             Log . i ( tag , "jsonTokener.next(8)|" + jsonTokener . next ( 8 ));             /* 读取位置前进到执行字符处(不包括字符)  */             Log . i ( tag , "jsonTokener.skipTo('m')|" + jsonTokener . skipTo ( 'm' ));             jsonTokener . next ( 8 );               Log . i ( tag , "jsonTokener.next(8)|" + jsonTokener . next ( 8 ));           } catch ( JSONException ex ) {               // 异常处理代码           }       }

运行结果: 03-28 22:05:03.800: I/robin(10412): jsonTokener.next(8)|{   "pho 03-28 22:05:03.800: I/robin(10412): jsonTokener.next()|n 03-28 22:05:03.800: I/robin(10412): jjsonTokener.nextClean()|e 03-28 22:05:03.800: I/robin(10412): jsonTokener.nextString('a')|" : ["12345678", "87654321"],   "n 03-28 22:05:03.800: I/robin(10412): jsonTokener.nextTo("0089")|me" : "yuanzhifei 03-28 22:05:03.800: I/robin(10412): jsonTokener.back() 03-28 22:05:03.800: I/robin(10412): jsonTokener.next()|i 03-28 22:05:03.800: I/robin(10412): skipPast("address") 03-28 22:05:03.800: I/robin(10412): jsonTokener.next(8)|" : { "c 03-28 22:05:03.800: I/robin(10412): jsonTokener.skipTo('m')|m 03-28 22:05:03.810: I/robin(10412): jsonTokener.next(8)| : false
八、JsonReader 原文: http://tonysun3544.iteye.com/blog/1330027 在google android中也有关于解析JSON的类库: java.io. JsonReader,但是只能在3.0以后的版本中才可以用,在这里我们用google提供的类库google-gson,可以从 code.google.com/p/google-gson /下载jar包。 下面通过一个小例子来学习一下: 例子: [{"name":"zhangsan","age":22},{"name":"lisi","age":23}] 分析: 1.开始解析数组 2.开始解析对象 3.解析键值对 4.解析键值对 5.解析对象结束 6.开始解析对象 7.解析键值对 8.解析键值对 9.解析对象结束 10.解析数组结束 示例8
       

    void startJsonReaderDemo (){         private String jsonData = "[{\"name\":\"zhangsan\",\"age\":22},{\"name\":\"lisi\",\"age\":23}]" ;           JsonReader reader = new JsonReader ( new StringReader ( jsonData ));         try         {             reader . beginArray (); /* 开始解析数组 */             while ( reader . hasNext ())             {                 reader . beginObject (); /* 开始解析对象 */                 while ( reader . hasNext ())                 {                     String tagName = reader . nextName (); /* 得到键值对中的key */                     /* key为name时/*                     if (tagName.equals("name"))                     {                         Log.i(tag, "name--------->" + reader.nextString()); /* 得到key中的内容 */                     } else if ( tagName . equals ( "age" )) /* key为age时*/                     {                           Log . i ( tag , "age--------->" + reader . nextInt ()); /* 得到key中的内容 */                     }                 }                 reader . endObject ();             }             reader . endArray ();         } catch ( IOException e )         {             e . printStackTrace ();         }     }

结束

更多相关文章

  1. Android系统开发小问题-启动过程中android字符没有显示出来 .
  2. android 字符串数组资源
  3. Android 分享文本和图片
  4. Android 访问Webservice接口,参数对象不能串行化问题解决(java.lan
  5. Activity之间传递对象
  6. Android的富文本功能
  7. Android 中如何得到字符的像素宽度
  8. 自动完成文本框AutoCompleteTextView
  9. 设置TextView显示文本倾斜

随机推荐

  1. Android(安卓)Fresco图片处理库用法API英
  2. Android(安卓)之 退出的2种方式
  3. Android音频实时传输与播放(三):AMR硬编码与
  4. Android是什么?
  5. Android的 getSystemService
  6. 记录Android开发中遇到的一些问题
  7. Android(安卓)- Android应用程序(Applica
  8. Android简单自定义圆形和水平ProgressBar
  9. [Android(安卓)Memory] Android(安卓)Zip
  10. 【Android】仿UC网络判断效果