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();
}