1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php解析 封装JSON与XML

php解析 封装JSON与XML

时间:2021-04-28 15:22:53

相关推荐

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;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。