android中json解析及使用 (下)


接上文
七、通过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)|{   "pho03-28 22:05:03.800: I/robin(10412): jsonTokener.next()|n03-28 22:05:03.800: I/robin(10412): jjsonTokener.nextClean()|e03-28 22:05:03.800: I/robin(10412): jsonTokener.nextString('a')|" : ["12345678", "87654321"],   "n03-28 22:05:03.800: I/robin(10412): jsonTokener.nextTo("0089")|me" : "yuanzhifei03-28 22:05:03.800: I/robin(10412): jsonTokener.back()03-28 22:05:03.800: I/robin(10412): jsonTokener.next()|i03-28 22:05:03.800: I/robin(10412): skipPast("address")03-28 22:05:03.800: I/robin(10412): jsonTokener.next(8)|" : { "c03-28 22:05:03.800: I/robin(10412): jsonTokener.skipTo('m')|m03-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();        }    }

结束
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告