Board logo

标题: 用 PHP 将 XML 转换成 JSON(1) [打印本页]

作者: look_w    时间: 2018-7-20 10:32     标题: 用 PHP 将 XML 转换成 JSON(1)

Asynchronous JavaScript + XML (Ajax) 的出现重新点燃了 Web 应用程序开发的热情,让很多架构师和开发人员重新考虑创建 Web 应用程序的方式。JavaScript Object Notation (JSON) 是一种用于表示在浏览器上运行的业务逻辑数据的数据交换格式。很多 Ajax 开发人员喜欢在浏览器端 JavaScript 代码中直接使用 JSON 处理数据。随着 JSON 的应用越来越多,有必要建立一个中间件服务器程序以 JSON 而非 XML 格式向浏览器提供企业应用程序数据。就是说开发人员需要将现有的 XML 编码的服务器端企业数据在发送给浏览器之前转换成 JSON。本文介绍了如何使用基于 PHP 的服务器程序,将 XML 格式的应用程序数据在发送到浏览器应用程序之前转换成 JSON 格式。
XML 基础XML 是定义标记的标准。基于 XML 的标记用于描述通过非预定义标记表示的数据。因为可以根据需要发明新的标记,所以 XML 具有很好的可扩展性。 显示了用 XML 表示的数据结构的例子。
    清单 1. XML 数据的简单例子
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<contacts>
<contact id="1">
<name>John Doe</name>
<phone>123-456-7890</phone>
<address>
<street>123 JFKStreet</street>
<city>Any Town</city>
<state>Any State</state>
<zipCode>12345</zipCode>
</address>
</contact>
</contacts>




第一行是 XML 声明,指定了 XML 版本和使用的字符编码。接下来是根元素 <contacts>,它包括几个孩子元素。互相嵌套的孩子元素共同定义了联系人的数据。其中,<address> 元素还有自己的孩子,形成了 <contact> 元素下的子树结构。XML 还允许在起始标记中使用属性,提供元素的其他信息。<contact> 元素有一个属性,为该元素分配 id 属性。XML 文档以根元素的结束标记 </contacts> 作为结束的标志。
JSON 基础和 XML 不同,JSON 不是一种标记语言。事实上,它是一种基于文本的数据交换格式。它是 JavaScript 对象和数组的数据语法。简单地说,JSON 可以简化数据的表示。比方说用花括号({})将对象括起来,用方括号([])将数组括起来。不需要任何特殊的解析或者额外的数据转换,JavaScript 代码很容易使用 JSON 编码的数据。 显示了 JSON 格式表示的数据结构。
清单 2. JSON 数据的简单例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"contacts" : {
"contact" : {
"@attributes" : {
"id" : "1"
},
"name" : "John Doe",
"phone" : "123-456-7890",
"address" : {
"street" : "123 JFK Street",
"city" : "Any Town",
"state" : "Any State",
"zipCode" : "12345"
}
}
}
}




可以看到, 中的 XML 例子所示的所有数据在 中的 JSON 例子中也存在。区别在于 JSON 如何使用 JavaScript 对象和数组数据类型编码数据。数据结构首先从一个包含属性 "contacts" 的对象开始,该属性本身也是一个对象。该对象有一个属性 "contact",它本身也是一个对象。该对象有几个属性,给出了联系人的详细信息。需要注意的是,"contact" 对象包括另一个(嵌套)对象 "address",描述详细的地址。和 XML 一样,JSON 格式的数据也是自我描述的,便于人和机器阅读。
浏览器端数据处理现在我们来看看浏览器端代码中是如何处理数据的。服务器将 XML 数据发送到浏览器时,使用文档对象模型(DOM)API 来处理这些 XML 数据。但是,JavaScript 开发人员必须了解 XML 处理的所有复杂之处,编写很多额外的代码来解析 XML 数据,然后才能用这些数据来实现相关操作。但是发明了 JSON 之后,服务器端代码可以包装和发送 JSON 编码的应用程序数据来响应浏览器请求。如果服务器端代码向浏览器发送 JSON 格式的数据,JavaScript 开发人员就不再需要额外编写复杂的逻辑来解析 XML 了。此外,在浏览器端代码中,收到的JSON 格式的数据很容易被作为原生 JavaScript 数据结构处理。 中的代码说明处理 JSON 格式的数据不需要任何额外的操作。
清单 3. 处理从服务器收到的 JSON 格式数据的代码片段
1
2
var result = httpRequest.responseText;
jsonResponse = eval('(' + result + ')');




中的浏览器端代码片段中,result 是从服务器接收到的 JSON 格式的字符串。通过使用 eval 语句对 JSON 格式的字符串求值,只需要一行代码就能将该字符串数据转化成原生 JavaScript 数据类型。可以看到,在浏览器端处理 JSON 数据要简单得多。使用 JSON 的意义在于简化浏览器端代码。
中的 eval 语句 将执行服务器返回的所有代码,因此这里存在安全风险。但风险是有限的,因为浏览器的安全策略限制了 JavaScript 的 HTTP 请求,必须是发往作为最初代码加载来源的同一台服务器。但有时候,把从服务器收到的数据传递给 eval 语句之前,检查其是否符合预期目标可能更谨慎一些,比如使用正则表达式。
XML 到 JSON 的转换越来越多的应用程序需要将 XML 转换成 JSON。已经出现了一些基于 Web 的服务来执行这类转换。IBM T.J. Watson Research Center 开发了一种专门的方法,使用 PHP 进行这种转换。该方法以 XML 字符串数据为输入并将其转换成 JSON 格式的数据输出。这种 PHP 的解决方案有以下几方面的优点:
XML 到 JSON 的转换需要用到两种 PHP 核心特性:
PHP 5 及更高版本支持 SimpleXMLElement。这个对象的属性包含 XML 文档中的所有数据。Services_JSON 是将近 2005 年年底批准的一项 PHP 开放源码提议。它提供了 JSON 专用的编码器(PHP 数据到 JSON)和解码器(JSON 到 PHP 数据)功能。这个开放源码的 PHP 类库可以通过 PEAR Web 站点(请参阅)下载。
只需要这两种 PHP 核心特性,就可以将任何 XML 数据转化成 JSON。首先,需要使用 SimpleXMLElement 将 XML 内容转化成适当的 PHP 数据类型。然后将 PHP 数据提供给 Services_JSON 编码器,后者再生成最终的 JSON 格式的输出。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0