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