android 数据解析

来源:互联网 发布:js结果放入html 编辑:程序博客网 时间:2024/06/05 03:12

一、JSON解析

(一)、两种结构

      1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构

      2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...]

 

(二)、相关类

      1、JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值

           a、toString() :输出一个标准的JSON字符串 如:{"query":"Pizza","locations":[94043,90210]}

           b、put():添加值  如:new JSONObject().put("JSON", "Hello, World!")

           c、get()、getString()、getInt() <---optType同理--> :得到数据 

      2、JSONArray:它代表一组有序的数值,对应数据结构的数组

           a、get()和opt()两种方法都可以通过index索引返回指定的数值

           b、put()方法用来添加或者替换数值

      3、JSONStringer:json文本构建类,这个类可以帮助快速和便捷的创建JSONtext。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照   JSON语法规则(syntax rules)创建JSON text。

           如:

try {JSONStringer jsonText = new JSONStringer();//首先是{,对象开始。object和endObject必须配对使用 jsonText.object();jsonText.key("phone");// 键phone的值是数组。array和endArray必须配对使用  jsonText.array();jsonText.value("12345678").value("87654321");jsonText.endArray();jsonText.key("name");jsonText.value("xinqing");jsonText.key("age");jsonText.value(100);jsonText.key("address");// 键address的值是对象  jsonText.object();jsonText.key("country");jsonText.value("china");jsonText.key("province");jsonText.value("shanghai");jsonText.endObject();jsonText.key("married");jsonText.value(false);//},对象结束jsonText.endObject();System.out.println("jsonText = " + jsonText.toString());} catch (JSONException e) {// TODO Auto-generated catch blockthrow new RuntimeException(e);  }

      4、JSONTokener:按照RFC4627规范将json文本解析为相应的对象,可用于对JSON的定位与查找

          a、nextValue()配合get()方法,获取对象

              如:

String JSONstr =  //多个""之前加上"\"以防冲突"{" +  "   \"phone\" : [\"12345678\", \"87654321\"]," +  "   \"name\" : \"yuanzhifei89\"," +  "   \"age\" : 100," +  "   \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +"   \"married\" : false," +  "}"; try {JSONTokener jsonParser = new JSONTokener(JSONstr);JSONObject person = (JSONObject) jsonParser.nextValue();// 接下来的就是JSON对象的操作了  person.getJSONArray("phone");  person.getString("name");  person.getInt("age");  person.getJSONObject("address");  person.getBoolean("married");  } catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}

           b、其它用来查看JSON文本中的文本的

              如:

try {JSONTokener jsonParser = new JSONTokener(JSONstr);// 继续向下读8个json文本中的字符。此时刚开始,即在{处  jsonParser.next(8);    //"phone tab算一个字符  jsonParser.next(); //"  // 继续向下读取一个json文本中的字符。该字符不是空白、同时也不是注视中的字符  jsonParser.nextClean(); //:  // 返回当前的读取位置到第一次遇到'a'之间的字符串(不包括a)。  jsonParser.nextString('a'); //  ["12345678", "87654321"],    "n(前面有两个空格)  // 返回当前读取位置到第一次遇到字符串中(如"0089")任意字符之间的字符串,同时该字符是trimmed的。(此处就是第一次遇到了89)  jsonParser.nextTo("0089"); //me" : "yuanzhifei  // 读取位置撤销一个  jsonParser.back();  jsonParser.next(); //i  // 读取位置前进到指定字符串处(包括字符串)  jsonParser.skipPast("address");  jsonParser.next(8); //" : { "c  // 读取位置前进到执行字符处(不包括字符)  jsonParser.skipTo('m');  jsonParser.next(8); //married"  } catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}


另,使用Google的GSON框架


 

原创粉丝点击