zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
    Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
    mysql-基本命令
    C# 监听值的变化
    DataGrid样式
    C# 获取当前日期时间
    C# 中生成随机数
    递归和迭代
    PHP 时间转几分几秒
    PHP 根据整数ID,生成唯一字符串
  • 原文地址:https://www.cnblogs.com/tengtao93/p/5289308.html
Copyright © 2011-2022 走看看