JSON概念,解析;XML解析

JSON与服务器进行数据交互最常见。

JSON概念:
JSON是一种轻量级的数据存储和交换格式,
它是完全独立于语言的文本格式,
JSON易于阅读,编写,也易于机器解析和生成。

JSON格式
键值对对象格式:用“{}”包围
数组格式:用“[]”包围

JSON与XML比较
JSON和XML在可读性、可扩展上都不相上下。
JSON解码更方便和简洁。
JSON对数据描述性比XML差。
应用JSON实现功能的速度要远快于XML。

JSON解析原则
“{}” ----> 创建JSONObject对象
“[]” ----> 创建JSONArray对象

JSON解析事例:
在res下。新建raw,person.json。

	{
		"name":"ming",
		"age":20,
		"address":
		{
			"city":"beijing",
			"code":"10001"
		},
		"phone":
		[
			{
				"type":"home",
				"number":"123456789"
			},
			{
				"type":"school",
				"number":"111111"
			}
		]
	}

以上文件其中address是对象,phone是数组。

private String getContent(Rescources res,int id)throw IOException{
	InputStream is=null;
	StringBuilder sb=new StringBuilder();
	try{
		is=res.openRawResource(id);
		byte[] buttfer=new byte[1024];
		while(len != -1){
			String s=new String(buffer,0,len);
			sb.append(s);
			len=is.read(buffr,0,1024);
		}	
	}finally{
		if(is != null){
			is.close();
		}
	}
	return sb.toString();
}

得到文件中的内容

private void parseJson() throw JSONException{
try{
	String data=getContent(getResources(),R.raw.person);
	JSONObject person=new JSONObject(data);
	String name=person.getString("name");
	String age=person.getString("age");
	
	JSONObject address=person.getJSONObject("address");
	String city=address.getString("city");
	String code=address.getString("code");

	//phone是数组,通过获取数组长度通过索引获取JSON对象
	JSONArray phone=person.getJSONArray("phone");
	for(int index=0;index<phone.length();index++){
		JSONObject obj=phone.getJSONObject(index);
		String type=obj.getString("type");
		String number=obj.getString("number");
	}
}catch (Exception e) {
    e.printStackTrace();
}
}

json是键值对的形式,通过键(key)来获取值。

String data="{\"name\":\"ming\"}";     //  "\"表示:转义。name是键,ming是值。

XML解析
采用pull解析xml
Android项目中XML资源位于res/xml目录下。
新建xml文件,创建person.xml

<person>
    <name value="one"/>
    <name value="two"/>
    <name value="three"/>
</person>
//XmlPullParser解析器,pull解析本质是SAX解析
XmlPullParser parser = getResources().getXml(R.xml.person);
 //获取事件类型
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT://文档开始
                    Log.i("test", "START_DOCUMENT");
                    break;
                case XmlPullParser.END_DOCUMENT://文档结束
                    Log.i("test", "END_DOCUMENT");
                    break;
                case XmlPullParser.START_TAG://标记(标签,元素NODE ELEMENT TAG)开始
                    tagName = parser.getName();//得到标记的名字
                    if (tagName.equals("name")) {//判断下标是否为name有value属性的
                        String value = parser.getAttributeValue(0);//value就是one,two···
                        Log.i("three", "tag" + tagName + "  " + value);
                    }
                    break;
                case XmlPullParser.END_TAG:
                    tagName = parser.getName();
                    Log.i("three", "tag2 " + tagName);
                    break;

            }
            eventType = parser.next();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值