玩蛇网提供最新Python编程技术信息以及Python资源下载!
您现在的位置: 玩蛇网首页 > JSON教程 > 正文内容

Javascript中JSON使用经验汇总

Javascript中JSON使用经验汇总,JavaScript 是一种通用的编程语言, 从一开始就被作为Netscape Navigator浏览器的页面脚本执行语言,它被认为是Java的一个子集, 尽管事实并不是这样。它是一种类 Scheme 的语言,同时有着类 C 的语法和弱对象。

JavaScript在ECMAScript的 ECMAScript Language Specification, Third Edition 中被标准化。

JSON 是JavaScript对象文字符号的一个子集,由于JSON是JavaScript的一个子集, 它可以自如的在JavaScript中使用。

var myJSONObject = { "bindings": [ {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} ] }; 

在这个例子中, 创建了只包含一个成员 bindings 的对象, 而这个对象又包含了一个拥有三个对象的数组, 其中每个数组对象包含了 ircEvent, method, regex 三个成员。成员可以用 点(.) 或者 下标([]) 操作符来引用。

myJSONObject.bindings[0].method // "newURI" 要将 JSON 字符串转换成一个对象, 我们可以用 eval() 函数。
eval() 会触发JavaScript的编译器。因为JSON是JavaScript的一个真子集, 编译器会正确的解析字符串内容, 同时生成一个对象结构。字符串必须用括号括起来, 以免产生JavaScript语法歧义。

var myObject = eval('(' + myJSONtext + ')'); eval 函数速度很快。它可以编译和执行任何JavaScript代码, 这里可能存在安全问题。当源是可信的并且完整的时候, 可以使用 eval。而用JSON解析器是更安全的方式。在使用XMLHttpRequest的Web程序中, 只允许在同源的情况下通信, 因此它是可信的。但它不一定是完整的,如果服务器用的不是严谨的JSON编码, 或者它没有严格检查所有输入内容, 它也可以提供无效的JSON, 同时带上危险的脚本。

此时, eval 将会执行该脚本, 产生危害。为了解决这个问题, 应该使用JSON解析器。JSON解析器只会识别JSON文本, 拒绝所有脚本。在提供原生JSON支持的浏览器中, JSON解析器比 eval 更快。原生的JSON支持很有可能包含在ECMAScript下一个版本的标准中。

var myObject = JSON.parse(myJSONtext, reviver); 可选的reviver参数是一个函数, 在每个键/值在每一级的最终结果后都会被调用。每个值将会被替换为reviver函数的返回结果。它可以用来将对象组织成伪类(pseudoclasses)的一个实例, 或者将date字符串转换成Date对象 myData = JSON.parse(text, function (key, value) { var type; if (value && typeof value === 'object') { type = value.type; if (typeof type === 'string' && typeof window[type] === 'function') { return new (window[type])(value); } } return value; });

JSON字符串化是一个反过来的动作, 它将JavaScript的数据结构转化成JSON字符串。JSON不支持循环的数据结构, 因此在用JSON字符串化的时候, 不要给它循环引用的结构。var myJSONText = JSON.stringify(myObject, replacer); 如果 stringify 方法发现对象包含了一个 toJSON 的方法, 它会调用这个方法, 然后将返回的结果字符串化。这允许对象自己定义它们的JSON表示方式。

字符串化方法可以带一个可选的字符串数组。这些字符串可以用来选择哪些属性将会被包含在生成的JSON文本中。字符串化方法还可以使用一个可选的 replacer 函数, 这个函数将会在结构中的每个值的 toJSON 方法(如果存在的话) 后调用。它将接收每个key和value作为它的参数。

这会被绑定在包含key的对象中。它返回的值会被字符串化。没有JSON表示的值(比如函数和undefined)将会被排除。无限大的数字将会被替换为NULL, 要替换其他值, 你可以用类似的 replacer 函数:

function replacer(key, value) { if (typeof value === 'number' && !isFinite(value)) { return String(value); } return value; } 提供一个合适的 reviver 函数给 JSON.parse 就可以实现,在执行 最小化 后, 还不到2.5KB大小.

玩蛇网文章,转载请注明出处和文章网址:http://www.iplaypy.com/json/7090.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年02月08日 - 10时19分43秒 发布自玩蛇网

我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules