android中json解析及使用 (下)
16lz
2021-01-23
接上文
七、通过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 (); } } 结束
更多相关文章
- Android系统开发小问题-启动过程中android字符没有显示出来 .
- android 字符串数组资源
- Android 分享文本和图片
- Android 访问Webservice接口,参数对象不能串行化问题解决(java.lan
- Activity之间传递对象
- Android的富文本功能
- Android 中如何得到字符的像素宽度
- 自动完成文本框AutoCompleteTextView
- 设置TextView显示文本倾斜