on2.js,你可以从这里获得它。
获得完毕json2.js文件后,你可以打开这个文件,在文件的前部分包含了相当大量的注释信息,如果你的英文足够好,那么你可以省略我这一节,参考该文件的注释就可以了,如果作为程序员,你已经看够了大片的字母,想看看我的汉字+字母,那你可以向下继续了。
简单的翻译下这个注释:可参考http://www.JSON.org/js.html该文件创建了一个包含两个方法的全局对象JSON,它的方法分别是:
代码: JSON.stringify(value, whitelist) value 任意的JavaScript值,一般是一个对象或者数组 whitelist 一个可选的数组参数,用于判定对象值如何被串行化 这个方法通过一个JavaScript值来生成JSON文本。在进行串行化时,根据可选的参数whitelist,有三种可能: 如果某个对象有toJSON方法,那么则调用该方法,toJSON方法的返回值将被串行化。 否则,如果可选参数whitelist是一个数组,那么数组中的元素将被用来选择对象进行串行化时的的成员。 否则,如果没有使用whitelist参数,则对象的所有成员将被串行化。 如果值没有JSON的表现形式,例如undefined或者函数,则其不会被串行化。在对象中,这样的值会被忽略,而在数组中将会被null替换。 JSON.stringify(undefined)会返回undefined。日期将会被串行化为被引用的ISO日期。 例:
代码: var text = JSON.stringify([''e'', {pluribus: ''unum''}]); //text is ''["e",{"pluribus":"unum"}]'' JSON.parse(text, filter) 该方法解析一个JSON文本,并生成一个组件或者数组,其可能抛出一个SyntaxError异常。 可选的filter参数是一个可过滤和转换结果的函数、它接受每个键和值,它的返回值用来替换源值。如果它返回所接收的值,那么结果不会被改变。如果他返回undefined,则该成员会被删除。 例:
代码: //解析文本,如果某个键包含字符串“date”,则将其值转换为日期 myData = JSON.parse(text, function (key, value) { return key.indexOf(''date'') >= 0 ? new Date(value) : value; }); 上面的入门教程已经使你基本了解了json2.js的使用方法,这里关于该文件我就不再赘述了,只是有一个小提示,如果你想简单的解析一个JSON文本,那么可以使用eval()函数,改函数是JavaScript的内置函数,例如解析在JSON.stringify的案例中生成的JSON文本,可以使用:
代码: var myE = eval(''["e",{"pluribus":"unum"}]''); 来获得对象myE。
在JavaScript中串行化为JSON—使用prototype.js
如果你和我一样,喜欢在自己的项目中使用开源的JavaScript框架,那么你可能可以省去使用json2.js文件了,这里以protype.js为例,该文件可以在http://www.prototypejs.org下载,由于本文不是在讲JavaScript框架,这里我假设你对prototype.js的使用已经有所了解了。 prototype.js中提供了对Object对象的toJSON方法,你可以使用Object.toJSON()方法来实现对对象的串行化,例如:
代码: var cat= { name:"hellokitty", height:"6 apples" } alert(Object.toJSON(cat)); //将弹出对话框,内容为 {"name": "hellokitty", "height": "6 apples"} 另外,在prototype.js中还有另外的JSON支持,主要是在Ajax对象中对Ajax返回请求中JSON内容的解析。这里暂时与我们的内容无关,也不再介绍了。
PHP与JSON
在上面我们一起了解了PHP进行对象串行化的方法以及在JavaScript中进行将对象串行化为JSON的方法,你大致会质疑我为什么将二者放在一起,因为他们的语法实际是不完全一样的,然而,在PHP中,可以对JSON文本进行反串行化,也可以将PHP的对象串行化为JSON而非PHP风格的文本。这主要是靠json_decode和json_encode两个函数来完成的,需要特别说明的是,这两个函数在PHP 5 >= 5.2.0中才被支持,如 |