用于表示数据的 JavaScript 对象表示法 (JSON) 机制已迅速成为 Web 开发人员工具包中不可或缺的一部分,它允许 JavaScript 应用程序直观地获取和解析数据,并在脚本中使用轻量级的数据封装。 Firefox 3.5 通过向顶级对象公开一个新的原语 - window.JSON
- 本地支持 JSON。
JSON 的原生“开箱即用”支持得益于 ECMAScript 第 5 版 (PDF 规范链接),该规范的其他方面也将 得到 Firefox 3.5 的支持。目前,原生 JSON 受 Firefox 3.5 和 IE8 支持,其他浏览器很快也可能会支持它。
原生 JSON 支持有两个优势
- 安全性。仅仅使用
eval
来评估作为字符串返回的表达式会引发 安全问题。此外,原生 JSON 原语只能处理数据。它不能用于解析包含方法调用的对象;尝试这样做会返回错误。 - 性能。使用第三方脚本和库安全地解析 JSON 可能会比浏览器中原生 JSON 解析慢。
让我们看一些示例。
搜索结果的 JSON API 可能如下所示
/*
Assume that you obtained var data
as a string from a server
For convenience we display this search
result on separate lines
*/
var data = ' { "responseData":
{"results": [
{
"SafeSearch":"true",
"url":"http://www.arunranga.com/i.jpg",
},
{
"SafeSearch":"false",
"url":"http://www.badarunranga.com/evil.jpg",
}
]}}';
此类资源可以通过使用 RESTful API 的简单 HTTP GET 请求返回。
使用原生 JSON,您可以执行以下操作
/*
Obtain a handle to the above JSON resource
This is best and most conveniently done
via third-party libraries that support native JSON
*/
if (window.JSON) {
var searchObj = JSON.parse(data);
for (var i=0; i++; i < searchObj.responseData.results.length) {
if (searchObj.responseData.results[i].SafeSearch) {
var img = new Image();
img.src = searchObj.responseData.results[i].url;
// ... Insert image into DOM ...
}
}
您还可以将对象序列化回字符串
// Back to where we started from
var data = JSON.stringify(searchObj);
// data now holds the string we started with
当然,要真正发挥 JSON 的强大功能,您需要通过 JSONP 等回调机制从不同域检索 JSON 资源。许多 Web 开发人员不太可能直接使用 JSON
原语。相反,他们会在 Dojo 和 jQuery 等库中使用它们。这些库允许从不同域检索和直接解析 JSON
资源,并为回调和 DOM 插入过程添加大量语法糖。
原生 JSON 原语与流行的 json2.js 库(它会正确检测是否启用了原生 JSON)一起工作,因此开发人员可以在不支持原生 JSON 的浏览器上无缝地使用 JSON 解析。在撰写本文时,Dojo 和 jQuery 已经承诺支持原生 JSON。
6 条评论