安卓速记3--JSon解析与XML解析
此篇Json教程为笔者结合网络资源及实际操作实践总结。会不定期更新。打星符号为重点
一、 JSON的解析
Json是一种广泛被采用的客户端和服务端交互的解决方案。在网络编程中对数据的传输尤为重要。
其解析方式可通过安卓自带的JsonObject解析,以及第三方解析库Gson。
一个Json数据样本
JsonArray数组 [{"weather":"雷阵雨转晴","temperature":"周日 07月31日 (实时:32℃)"}, {"weather":"雷阵雨转晴","temperature":"周日 07月31日 (实时:32℃)"} ]
JsonObject字符串对象 {"weather":"雷阵雨转晴","temperature":"周日 07月31日 (实时:32℃)"}
1. JsonObject解析Json
A.若要解析的数据jsonData为数组,即JsonArray时,用以下方式解析
privatevoid parseJSONWithJSONObject(StringjsonData) {
try {
JSONArray jsonArray = new JSONArray(jsonData);
for (int i = 0; i< jsonArray.length(); i++) {
JSONObject jsonObject =jsonArray.getJSONObject(i);
String id =jsonObject.getString("weather");
String name =jsonObject.getString("temperature");
Log.d("MainActivity","weather is " + weather);
Log.d("MainActivity","temperature is " + temperature);
}
} catch (Exception e) {
e.printStackTrace();
}
}
★B.若要解析的格式为字符串,即JsonObject时,jsonData为字符串(一般从服务器Php文件传来的或API传来的都为这种格式)
JSONObject myJsonObject = new JSONObject(jsonMessage);
//获取对应的值
value1 = myJsonObject.getString("weather");
2. Gson解析Json
需要导入Gson库Jar包,下载地址百度即可
privatevoid parseJSONWithGSON(String jsonData) {
Gson gson = new Gson();
List<App> appList =gson.fromJson(jsonData, new TypeToken<List<App>>() {
}.getType());
for (App app : appList) {
Log.d("MainActivity","weather is " + app.getWeather());
Log.d("MainActivity","temperature is " + app.getTemperature());
}
}
3. XML解析
一个XML数据样本
1. SAX解析XML
privatevoid parseXMLWithSAX(String xmlData) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader xmlReader = factory.newSAXParser().getXMLReader();
ContentHandler handler = newContentHandler();
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(newStringReader(xmlData)));
} catch (Exception e) {
e.printStackTrace();
}
}
4. Pull解析XML
privatevoid parseXMLWithPull(String xmlData) {
try {
XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser =factory.newPullParser();
xmlPullParser.setInput(newStringReader(xmlData));
int eventType =xmlPullParser.getEventType();
String id = "";
String name = "";
while (eventType !=XmlPullParser.END_DOCUMENT) {
String nodeName =xmlPullParser.getName();
switch (eventType) {
// 开始解析某个结点
case XmlPullParser.START_TAG: {
if ("id".equals(nodeName)){
id =xmlPullParser.nextText();
} else if("name".equals(nodeName)) {
name =xmlPullParser.nextText();
}
break;
}
// 完成解析某个结点
case XmlPullParser.END_TAG: {
if("app".equals(nodeName)) {
Log.d("MainActivity", "id is " + id);
Log.d("MainActivity", "name is " + name);
}
break;
}
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}