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();
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章