php中json数据和xml数据的封装

<?php
/*
 * 作用:将p转换为josn格式的数据
 * 备注:json_encode只接受UTF-8的编码数据
*/
//echo json_encode($arr);

/*
 * 作用:将p3数据从p1编码转换为p2编码
 * p1: 原编码
 * p2: 目标编码
 * p3: 要转换编码的数据
 */
//$newData = icov("UTF-8", "GBK", $data);

/*

php组装xml串的方法
1、组装字符串
2、DomDocument
3、XMLWriter
4、SimpleXML

*/


class CPackData{

	const JSON = "json";

	/*
	 * 按json方式输出通信数据
	 * @param integer $code 状态码
	 * @param string $message 提示信息
	 * @param array $data 数据
	 * @return string
	 */
	public static function json($code, $message = "", $data = array()){
		if (!is_numeric($code)){
			return;
		}

		$result = array(
			"code" => $code,
			"message" => $message,
			"data" => $data
		);

		echo json_encode($result);
		exit;
	}

	

	/*
	 * 按xml方式输出通信数据
	 * @param integer $code 状态吗
	 * @param string $message 提示信息
	 * @param array $data 数据
	 * @return string
	 */
	public static function xmlEncode($code, $message = "", $data = array()){
		if (!is_numeric($code)) {
			return;
		}

		$result = array(
			"code" => $code,
			"message" => $message,
			"data" => $data
	    );

	    header("Content-Type:text/xml");
	    $xml = "<?xml version='1.0' encoding='UTF-8' ?>";
		$xml .= "<root>";
		$xml .= self::xmlToEncode($result);
		$xml .= "</root>";

		echo $xml;
	}

	public static function xmlToEncode($data){
		$xml = $attr = "";
		 foreach ($data as $key => $value) {

		 	// 当key是数字时,数字是不能作为xml的节点名称的,所以做一个转换,即如下:
		 	// <0>4</0> --> <item id="0">4</item>
		 	// 备注:新取一个名称为Item的节点,将key值作为item的一个id属性值保存
		 	if (is_numeric($key))
		 	{
		 		$attr = " id='{$key}'";// 注意:id前面的空格不要漏掉了,值的单引号也不要漏掉了
		 		$key = "item";
		 	}

			$xml .= "<{$key}{$attr}>";
			$xml .= is_array($value) ? self::xmlToEncode($value) : $value;// 备注:如果直接写成 $xml .= $value; 会出错
			//$xml .= $value;
			$xml .= "</{$key}>";
		 }
		return $xml;
	}

	/*
	 * 按json方式输出通信数据
	 * @param integer $code 状态码
	 * @param string $message 提示信息
	 * @param array $data 数据
	 * @param $type 封装后的数据格式。 取值:json/xml
	 * @return string
	 */
	public static function commonPack($code, $message = "", $data = array(), $type = self::JSON){
		if (!is_numeric($code)) {
			return;
		}

		$type = isset($_GET["dataType"]) ? $_GET["dataType"] : self::JSON;

		$result = array(
			"code" => $code,
			"message" => $message,
			"data" => $data
		);

		if ($type == "json")
		{
			self::json($code, $message, $data);
			exit;
		}
		else if ($type == "xml")
		{
			self::xmlEncode($code, $message, $data);
			exit;
		}
		else if ($type == "debug")
		{
			var_dump($result);
		}
		else
		{
			// TODD: 其他业务处理
		}
	}


}



?>

测试代码(test.php):

<?php

require_once("./generate_data.php");

$arr = array(
	"id" => 1,
	"name" => "iBoost",
	"type" => array(4,5,6),
	"test" => array(1,45,67=>array(123,"test1"))
);

//CPackData::json(200, "数据返回成功", $arr);
//CPackData::xmlEncode(200, "success", $arr);
CPackData::commonPack(200,"success", $arr, "array");

?>

在浏览器中运行以上代码前,要先搭建好php的开发环境(此处略)

在浏览器中,

输入:http://localhost/test_json.php

则打印json串


输入:http://localhost/test_json.php?dataType=xml

则打印xml字符串


输入:http://localhost/test_json.php?dataType=debug

则打印调试信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值