zoukankan      html  css  js  c++  java
  • php解析、封装JSON与XML

    比如阿里、腾讯、百度在提供第三方服务的时候都是通过JSON或XML进行传递数据。在工作的时候和第三方公司对接的时候也是这两种数据格式,所以在这总结一下这两种格式的封装和解析。

    JSON的封装和解析

    封装JSON数据

    <?php
    	$items = array(
      array('id'=>1,'name'=>"衣服",'parId'=>0),
      array('id'=>2,'name'=>"书籍",'parId'=>0),
      array('id'=>3,'name'=>"T恤",'parId'=>1),
      array('id'=>4,'name'=>"裤子",'parId'=>1),
      array('id'=>5,'name'=>"鞋子",'parId'=>1),
      array('id'=>6,'name'=>"皮鞋",'parId'=>5),
      array('id'=>7,'name'=>"运动鞋",'parId'=>5),
      array('id'=>8,'name'=>"耐克",'parId'=>7),
      array('id'=>9,'name'=>"耐克",'parId'=>3),
      array('id'=>10,'name'=>"鸿星尔克",'parId'=>7),
      array('id'=>11,'name'=>"小说",'parId'=>2),
      array('id'=>12,'name'=>"科幻小说",'parId'=>11),
      array('id'=>13,'name'=>"古典名著",'parId'=>11),
      array('id'=>14,'name'=>"文学",'parId'=>2),
      array('id'=>15,'name'=>"四书五经",'parId'=>14)
    );
    	$message = json_encode($items,JSON_UNESCAPED_UNICODE);
    	echo $message;
    	
    

    效果:

    描述:第二参数是将中文不转为UNICODE的编码(JSON_UNESCAPED_UNICODE),默认转换成UNICODE的编码;

    解析JSON数据

    <?php
    	$str = '[{"id":1,"name":"衣服","parId":0},{"id":2,"name":"书籍","parId":0},{"id":3,"name":"T恤","parId":1},{"id":4,"name":"裤子","parId":1},
    {"id":5,"name":"鞋子","parId":1},{"id":6,"name":"皮鞋","parId":5},{"id":7,"name":"运动鞋","parId":5},{"id":8,"name":"耐克","parId":7},
    {"id":9,"name":"耐克","parId":3},{"id":10,"name":"鸿星尔克","parId":7},{"id":11,"name":"小说","parId":2},{"id":12,"name":"科幻小说","parId":11},
    {"id":13,"name":"古典名著","parId":11},{"id":14,"name":"文学","parId":2},{"id":15,"name":"四书五经","parId":14}]'; $res = json_decode($str, true); var_dump($res);

    效果:

    描述:第二个参数是将数据转换为数组的格式(true),默认是json对象的格式

    XML的封装和解析         

    <?php
    /**
     * XML 工具类,用于构建与解析 XML.
     */
    class XmlUtils
    {
    
        /**
         * XML 转换为数组.
         * @param string $xml XML string
         * @return array
         */
        public static function parse($xml)
        {
            $data = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS);
    
            if (is_object($data) && get_class($data) === 'SimpleXMLElement') {
                $data = self::arrarval($data);
            }
    
            return $data;
        }
    
        /**
         * XML编码
         * @param mixed  $data 数据
         * @param string $root 根节点名
         * @param string $item 数字索引的子节点名
         * @param string $attr 根节点属性
         * @param string $id  数字索引子节点key转换的属性名
         * @return string
         */
        public static function build($data, $root = 'xml', $item = 'item', $attr = '', $id = 'id')
        {
            if (is_array($attr)) {
                $_attr = array();
                foreach ($attr as $key => $value) {
                    $_attr[] = "{$key}="{$value}"";
                }
                $attr = implode(' ', $_attr);
            }
    
            $attr = trim($attr);
            $attr = empty($attr) ? '' : "{$attr}";
            $xml = "<{$root} {$attr}>";
            $xml .= self::data2Xml($data, $item, $id);
            $xml .= "</{$root}>";
            return $xml;
        }
    
        /**
         * 生成.
         * @param string $string 内容
         * @return string
         */
        public static function cdata($string)
        {
            return sprintf('%s', $string);
        }
    
        /**
         * 把对象转换成数组.
         * @param string $data 数据
         * @return array
         */
        private static function arrarval($data)
        {
            if (is_object($data) && get_class($data) === 'SimpleXMLElement') {
                $data = (array)$data;
            }
    
            if (is_array($data)) {
                foreach ($data as $index => $value) {
                    $data[$index] = self::arrarval($value);
                }
            }
            return $data;
    
        }
    
        /**
         * 转换数组为xml.
         * @param array  $data 数组
         * @param string $item item的属性名
         * @param string $id  id的属性名
         * @return string
         */
        private static function data2Xml($data, $item = 'item', $id = 'id')
        {
    
            $xml = $attr = '';
    
            foreach ($data as $key => $val)
            {
                if (is_numeric($key))
                {
                    $id&&$attr = "{$id}="{$key}"";
                    $key = $item;
                }
                $xml .= "<{$key} {$attr}>";
                if ((is_array($val) || is_object($val))) {
                    $xml .= self::data2Xml((array)$val, $item, $id);
                } else {
                    $xml .= is_numeric($val) ? $val : self::cdata($val);
                }
                $xml .= "</{$key}>";
            }
    
            return $xml;
    
        }
    
    }
    

      

  • 相关阅读:
    hdu_5855_Less Time, More profit(二分+最大权闭合图)
    hdu_5832_A water problem(模拟)
    poj_3261_Milk Patterns(后缀数组)
    [bzoj1072][SCOI2007]排列(状态压缩DP)
    [bzoj1597][USACO2008]土地购买(DP斜率优化/四边形优化)
    [bzoj1293][SCOI2009]生日礼物(单调队列)
    [bzoj 2463]谁能赢呢?(博弈论)
    矩阵快速幂优化递推总结
    [bzoj1563][NOI2009]诗人小G(决策单调性优化)
    [bzoj1821][JSOI2010]部落划分(贪心)
  • 原文地址:https://www.cnblogs.com/meichao/p/9356028.html
Copyright © 2011-2022 走看看