?熟悉XML/JSON解析數(shù)據(jù)签赃,以及數(shù)據(jù)存儲方式
數(shù)據(jù)的存儲方式包括:File谷异、SheredPreferences分尸、XML/JSON、數(shù)據(jù)庫歹嘹、網(wǎng)絡(luò)
XML/JSON解析數(shù)據(jù):
一箩绍、XML解析
1.解析*****
獲取解析器: Xml.newPullParser()
設(shè)置輸入流: setInput()
獲取當(dāng)前事件類型: getEventType()
解析下一個事件,獲取類型: next()
獲取標(biāo)簽名: getName()
獲取屬性值: getAttributeValue()
獲取下一個文本: nextText()
獲取當(dāng)前文本: getText()
5種事件類型: START_DOCUMENT, END_DOCUMENT,START_TAG, END_TAG, TEXT
示例代碼:
publicList getPersons(InuptStream in){
XmlPullParserparser=Xml.newPullParser();//獲取解析器
parser.setInput(in,"utf-8");
for(int type=){//循環(huán)解析
}
}
2.生成*
獲取生成工具: Xml.newSerializer()
設(shè)置輸出流: setOutput()
開始文檔: startDocument()
結(jié)束文檔: endDocument()
開始標(biāo)簽: startTag()
結(jié)束標(biāo)簽: endTag()
屬性: attribute()
文本: text()
示例代碼:
XmlSerializer
serial=Xml.newSerializer();//獲取xml序列化工具
serial.setOuput(put,"utf-8");
serial.startDocument("utf-8",true);
serial.startTag(null,"persons");
for(Personp:persons){
serial.startTag(null,"persons");
serial.attribute(null,"id",p.getId().toString());
serial.startTag(null,"name");
serial.attribute(null,"name",p.getName().toString());
serial.endTag(null,"name");
serial.startTag(null,"age");
serial.attribute(null,"age",p.getAge().toString());
serial.endTag(null,"age");
serial.endTag(null,"persons");
}
(二)JSON解析
1、JSON書寫格式:
1)JSON的規(guī)則很簡單:對象是一個無序的“‘名稱/值’對”集合尺上。
一個對象以“{”(左括號)開始材蛛,“}”(右括號)結(jié)束。每個“名稱”后跟一個“:”(冒號)怎抛;“‘名稱/值’對”之間使用“,”(逗號)分隔卑吭。
2)規(guī)則如下:
①映射用冒號(“:”)表示。名稱:值
②并列的數(shù)據(jù)之間用逗號(“马绝,”)分隔豆赏。名稱1:值1,名稱2:值2
③映射的集合(對象)用大括號(“{}”)表示。{名稱1:值,名稱2:值2}
④并列數(shù)據(jù)的集合(數(shù)組)用方括號(“[]”)表示富稻。
[
{名稱1:值,名稱2:值2},
{名稱1:值,名稱2:值2}
]
⑤元素值可具有的類型:string, number, object, array, true, false, null
2掷邦、舉例:
1)JSON對象(鍵值對或鍵值對的集合)
例1、{"name": "Obama"}
例2椭赋、{"name": "Romney","age": 56}
例3抚岗、{"city":{"name":"bj"},"weatherinfo":{"weather":"sunny"}}
例4、{
"city":{"name": "北京",“city_id”:"101010100"},
"weatherinfo":{"weather":"sunny","temp":"29度"}
}
2)JSON數(shù)組
例1哪怔、
[
{ "name": "張三", "age":22,"email": "zhangsan@qq.com" },
{ "name": "李四", "age":23,"email": "lisi@qq.com"},
{ "name": "王五", "age":24,"email": "wangwu@qq.com" }
]
例2宣蔚、
{"student":
[
{ "name": "張三", "age":22,"email": "zhangsan@qq.com" },
{ "name": "李四", "age":23,"email": "lisi@qq.com"},
{ "name": "王五", "age":24,"email": "wangwu@qq.com" }
]
}
[ {
title : "國家發(fā)改委:臺灣降油價和大陸沒可比性",
description : "國家發(fā)改委副主任朱之鑫",
image :"http://192.168.1.101/Web/img/a.jpg",
comment : 163
},{
title : "國家發(fā)改委:臺灣降油價和大陸沒可比性",
description : "國家發(fā)改委副主任朱之鑫",
image : "http://192.168.1.101/Web/img/b.jpg",
comment : 0
}, {
title : "國家發(fā)改委:臺灣降油價和大陸沒可比性",
description : "國家發(fā)改委副主任朱之鑫",
image :"http://192.168.1.101/Web/img/c.jpg",
comment : 0
} ];
3、在Android中使用json
在Android中內(nèi)置了JSON的解析API认境,在org.json包中包含了如下幾個類:
JSONArray胚委、JSONObject、JSONStringer元暴、JSONTokener和一個異常類JSONException
4篷扩、JSON解析:
解析步驟
1)、讀取html文件源代碼茉盏,獲取一個json字符串
InputStreamin = conn.getInputStream();
StringjsonStr = DataUtil.Stream2String(in);//將流轉(zhuǎn)換成字符串的工具類
2)鉴未、將字符串傳入響應(yīng)的JSON構(gòu)造函數(shù)中
①、通過構(gòu)造函數(shù)將json字符串轉(zhuǎn)換成json對象
JSONObjectjsonObject = new JSONObject(jsonStr)鸠姨;
②铜秆、通過構(gòu)造函數(shù)將json字符串轉(zhuǎn)換成json數(shù)組:
JSONArray array= new JSONArray(jsonStr);
3)、解析出JSON中的數(shù)據(jù)信息:
①讶迁、從json對象中獲取你所需要的鍵所對應(yīng)的值
JSONObjectjson=jsonObject.getJSONObject("weatherinfo");
Stringcity = json.getString("city");
Stringtemp = json.getString("temp")
②连茧、遍歷JSON數(shù)組,獲取數(shù)組中每一個json對象,同時可以獲取json對象中鍵對應(yīng)的值
for(int i = 0; i < array.length(); i++) {
JSONObjectobj = array.getJSONObject(i);
Stringtitle=obj.getString("title");
Stringdescription=obj.getString("description");
}
注意:
①json數(shù)組并非全是由json對象組成的數(shù)組
②json數(shù)組中的每一個元素?cái)?shù)據(jù)類型可以不相同
如:[94043,90210]或者["zhangsan",24]類似于javascript中的數(shù)組
5啸驯、生成JSON對象和數(shù)組:
1)生成JSON:
方法1客扎、創(chuàng)建一個map,通過構(gòu)造方法將map轉(zhuǎn)換成json對象
Map map = new HashMap();
map.put("name","zhangsan");
map.put("age",24);
JSONObjectjson = new JSONObject(map);
方法2罚斗、創(chuàng)建一個json對象徙鱼,通過put方法添加數(shù)據(jù)
JSONObjectjson=new JSONObject();
json.put("name","zhangsan");
json.put("age",24);
2)生成JSON數(shù)組:
方法1、創(chuàng)建一個list针姿,通過構(gòu)造方法將list轉(zhuǎn)換成json對象
Map map1 = new HashMap();
map1.put("name","zhangsan");
map1.put("age",24);
Map map2 = new HashMap();
map2.put("name","lisi");
map2.put("age",25);
List> list=new ArrayList>();
list.add(map1);
list.add(map2);
JSONArrayarray=new JSONArray(list);
System.out.println(array.toString());