1. 背景介绍
现在的web开发越来越多地使用基于RESTful API的微服务,其推崇的数据格式为JSON。而在一些老的系统中,仍使用XML作为其主要数据格式。这个时候,将XML数据转换为JSON数据是一个必须面对的问题。
2. XML转为数组
2.1 xml_decode函数
php有一个xml_decode函数可以将XML数据转为PHP数组。但该函数在应对较大的XML数据时,会容易导致内存溢出。所以为了更好的支持大XML数据的转换,我们可以使用基于SimpleXML扩展的xml2array函数。
function xml2array($xml) {
$arr = array();
foreach ($xml->children() as $element) {
$tag = $element->getName();
$value = (string) $element;
if ($element->count()) {
$arr[$tag][] = xml2array($element);
}
else {
$arr[$tag][] = $value;
}
}
return $arr;
}
xml2array函数会递归地将XML结构转换为数组,并返回该数组。
2.2 使用xml2array函数转换XML数据
$xml = simplexml_load_string($myXMLData);
$array = xml2array($xml);
这样,我们就完成了将XML数据转换为PHP数组。
3. 数组转为JSON
3.1 使用json_encode函数
php中的json_encode函数可以将PHP数组数据转换为JSON数据。
$json = json_encode($array);
这里需要注意,在转换过程中,会用到Unicode字符集,所以最终返回的字符串中,含有一些乱码,需要在前端中进行Unicode转码。
3.2 转换后的JSON数据示例
{
"root": {
"books": [
{
"book": {
"name": [
"The Old Man and the Sea"
],
"author": [
"Ernest Hemingway"
],
"publisher": [
"Charles Scribner's Sons"
],
"price": [
"12.99"
]
}
},
{
"book": {
"name": [
"One Hundred Years of Solitude"
],
"author": [
"Gabriel Garcia Marquez"
],
"publisher": [
"Harper Perennial"
],
"price": [
"14.87"
]
}
}
]
}
}
4. 结论
本文通过介绍php中XML转换为JSON的方法,为有这方面需求的开发者提供了参考。值得注意的是,本文所介绍的xml2array函数足以胜任一般的XML数据转换任务,但在实际使用过程中,还需根据具体业务需求进行代码优化和错误处理。