android 数据解析

一、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 block
			throw 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 block
			e.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 block
			e.printStackTrace();
		}


另,使用Google的GSON框架


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值