Android中对XML和JSON数据解析的方法汇总
来源:互联网 发布:javascript 英文地图 编辑:程序博客网 时间:2024/05/21 11:26
就目前来讲,在 Android 开发中,还是以 JSON 格式数据较为常见,但偶尔还是会碰到需要在项目中使用 XML 格式数据的情况,这篇文章总结了几种常见的解析 XML 和 JSON 数据的用法
XML解析
<apps> <app> <id>111</id> <city>江西</city> <weather>阴转晴</weather> </app> <app> <id>222</id> <city>湖南</city> <weather>雨夹雪</weather> </app> </apps>
Pull解析XML
private void parseXMLWithPull(String xmlData) { try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser pullParser = factory.newPullParser(); pullParser.setInput(new StringReader(result)); int eventType = pullParser.getEventType(); final StringBuilder sb = new StringBuilder(); while (eventType != XmlPullParser.END_DOCUMENT) { String nodeName = pullParser.getName(); switch (eventType) { case XmlPullParser.START_TAG: { if ("id".equals(nodeName)) { sb.append(pullParser.nextText()); } else if ("city".equals(nodeName)) { sb.append(pullParser.nextText()); } else if ("weather".equals(nodeName)) { sb.append(pullParser.nextText()); sb.append("\n"); } break; } case XmlPullParser.END_TAG:{ if ("app".equals(nodeName)) { runOnUiThread(new Runnable() { mTextView.setText(sb.toString());//在主线程中更新UI } }); } break; } default: break; } eventType = pullParser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
SAX解析XML
private void parseXMLWithSAX(String xmlData) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); XMLReader xmlReader = factory.newSAXParser().getXMLReader(); //通过获取到的InputStream来得到InputSource实例 InputSource inputSource = new InputSource(new StringReader(xmlData)); //初始化自定义的类MyXMLParserHandler,将mList传递给它,以便装载数据 xmlReader.setContentHandler(new MyXMLParserHandler(mList));//之前要定义并初始化 xmlReader.parse(inputSource); } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
自定义MyXMLParserHandler类(BeanItem对象用来装载值)
public class MyXMLParserHandler extends DefaultHandler { //声明一个字符串变量 private String content; //声明一个装载Beauty类型的List private List<BeanItem> mList; private BeanItem beanItem; public MyXMLParserHandler(List<BeanItem> mList) { this.mList = mList; } @Override public void startDocument() throws SAXException { super.startDocument(); } //开始解析某个节点 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if ("app".equals(localName)) { beanItem = new BeanItem(); } } //当SAX解析器解析到某个属性值时,会调用的方法,其中参数ch记录了这个属性值的内容 @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); content = new String(ch,start,length); } //当SAX解析器解析到某个元素结束时,会调用的方法,其中localName记录的是元素属性名 @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if ("id".equals(localName)) { beanItem.setId(content); } else if ("city".equals(localName)) { beanItem.setCity(content); } else if ("weather".equals(localName)) { beanItem.setWeather(content); } else if ("app".equals(localName)) { mList.add(beanItem); } } //完成整个XML解析时调用 @Override public void endDocument() throws SAXException { super.endDocument(); } }
DOM解析XML(Android不推荐)
解析JSON数据
[ {"id":"5","version":"5.5","name":"Angry Birds"}, {"id":"6","version":"7.0","name":"Clash of Clans"}, {"id":"7","version":"3.5","name":"Hey Day"}]
- JSONObject解析
private void parseJSONWithJSONObject(String jsonData) { try { JSONArray jsonArray = new JSONArray(jsonData); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String id = jsonObject.getString("id"); String name = jsonObject.getString("name"); String version = jsonObject.getString("version"); } } catch (Exception e) { e.printStackTrace(); }}
- GSON解析
private void parseJSONWithGSON(String jsonData) { Gson gson = new Gson(); List<ItemBean> itemList = gson.fromJson(jsonData, newTypeToken<List<ItemBean>>() {}.getType());//ItemBean是吧JSON数据的id,version,name封装成了一个对象 for (ItemBean item : itemList) { Log.d("MainActivity", "id is " + item.getId()); Log.d("MainActivity", "name is " + item.getName()); Log.d("MainActivity", "version is " + item.getVersion()); }}
0 0
- Android中对XML和JSON数据解析的方法汇总
- Android中XML和JSON数据的解析小案例
- Android中对json数据的解析
- ajax对 XML 和 Json 数据的解析
- Android解析XML数据和Json数据
- js实现json和xml数据的解析方法
- Android网络数据JSON和XML的解析
- Android 开发实践 解析XML和JSON格式的数据
- WindowsPhone中XML和Json格式的数据解析
- Android 解析xml 和 json数据总结
- Android解析xml和json格式数据
- android中常见的二种数据解析方法----XML和Json
- Android中xml和json文件的解析和创建
- android中数据存储及对xml的解析
- android中数据存储及对xml的解析
- android对json数据的解析
- android对json数据解析的封装
- Android中对json的解析和处理
- void void*解析
- 强引用、软引用、弱引用
- PAT乙级(Basic Level)练习题 >NowCoder小定律
- PAT乙级(Basic Level)练习题 >NowCoder小定律
- Linux-进程描述(3)之进程状态僵尸进程与孤儿进程
- Android中对XML和JSON数据解析的方法汇总
- 有了Windows Defender应用程序防护功能,再也不担心电脑免遭恶意攻击
- 1018. 锤子剪刀布
- Kafka的Topic操作
- 返回上一页并强制刷新的js代码
- java 从键盘输入数据判断是否是整数,是的话再求和
- 面试8之给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成
- 武汉大学校赛总结 + E题+F题
- Linux-进程描述(2)之进程标识符进程位置与环境变量