• Android--数据解析


    一、XML解析:

      1、Pull 解析方式:

        1)先获取到一个 XmlPullParserFactory 的实例, 并借助这个实例得到 XmlPullParser 对象;

        2)调用 XmlPullParser 的 setInput() 方法将服务器返回的XML 数据设置进去;

        3)通过 getEventType() 方法可以得到当前的解析事件,可以使用循环来进行解析,如果当前的解析事件不等于 XmlPullParser.END_DOCUMENT,说明解析工作还没完成,调用 next() 方法后可以获取下一个解析事件。

       示例代码:

    private void parseXmlWithPull(String xml){
        try{
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(new StringReader(xml));
            //获取节点类型
            int eventType = parser.getEventType();
            while(eventType != XmlPullParser.END_DOCUMENT){
                // 获取当前解析节点名
                String nodeName = parser.getName();
                switch(eventType){
                    // 开始解析某个结点
                    case XmlPullParser.START_TAG:
                        break;
                    // 完成解析某个结点
                    case XmlPullParser.END_TAG:
                        break;
                    default:
                        break;
                }
                parser.next();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

      2、SAX解析方式:

        1)新建一个类继承自 DefaultHandler;

        2)重写如下 5 个方法:

          --startDocument(): 在开始XML 解析的时候调用;

          --startElement(): 在开始解析某个结点的时候调用;

          --characters(): 在获取结点中内容的时候调用;

          --endElement(): 在完成解析某个结点的时候调用;

          --endDocument():完成整个XML 解析的时候调用。

    public class ContentHandler extends DefaultHandler {
    
        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
        }
        /**方法里面参数为被解析节点的信息,如localName表示节点名*/
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
        }
        
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
        }
    
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
        }
    
        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
        }
    }

        3)创建 SAXParserFactory 实例 :SAXParserFactory factory = SAXParserFactory.newInstance();

        4)创建 XMLReader 对象:XMLReader xmlReader = factory.newSAXParser().getXMLReader();

        5)新建自定义的 ContentHandler 对象;

        6)将ContentHandler的实例设置到 XMLReader 中;

        7)调用 XMLReader 的 parse() 方法开始解析:xmlReader.parse(new InputSource(new StringReader(xmlData)));

      代码示例:

    private void parseXmlWithSAX(String xml){
        try{
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();
            XMLReader reader = parser.getXMLReader();
    
            ContentHandler handler = new ContentHandler();
            reader.setContentHandler(handler);
            reader.parse( new InputSource( new StringReader(xml) ) );
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    二、Json解析:

      1、使用 JSONObject 解析:

    private void parseJsonWithJSONObject(String json){
        try{
            JSONArray jsonArray = new JSONArray(json);
            for(int i = 0; i < jsonArray.length(); i++){
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String data = jsonObject.getString("data");
                ......;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

      2、使用 GSON 解析:GSON 解析 Json更为简单

        1)使用 GSON 前需要导入 jar 包:gson-2.2.4.jar

        2)GSON 可以将一段JSON 格式的字符串自动映射成一个对象,从而不需要手动解析;

    private void parseJSONWithGSON(String jsonData) {
        Gson gson = new Gson();
        List<Object> data = gson.fromJson(jsonData, new
                TypeToken<List<Object>>() {}.getType());
        for (Object obj : data) {
            ......;
        }
    }

        3)若解析的不是一个 JSON 数组,则可以直接写成:ObjectType type = gson.fromJson(jsonData, ObjectType.class);

  • 相关阅读:
    TP中模型实例化
    PHP中面向对象编程思想的3个特征
    static关键字的新用法
    PHP中与类有关的运算符
    PHP中与类和对象有关的几个系统函数
    PHP中与类有关的几个魔术常量
    PHP与类有关的几个魔术方法
    PHP中类型约束
    PHP对象类型转换
    ubuntu MySQL拒绝远程连接(10061)
  • 原文地址:https://www.cnblogs.com/tengtao93/p/5289308.html
Copyright © 2020-2023  润新知