Chinaunix首页 | 论坛 | 博客
  • 博客访问: 380794
  • 博文数量: 80
  • 博客积分: 2682
  • 博客等级: 少校
  • 技术积分: 907
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-16 09:55
文章分类

全部博文(80)

文章存档

2012年(80)

分类: 系统运维

2012-07-13 11:44:31

这种编程语言首要的目的是为Netscape Navigator提供一种页面脚本语言。它是一种并且的-like语言。JavaScript使用了进行了标准化。

JSON是JavaScript面向对象语法的一个子集。由于JSON是JavaScript的一个子集,因此它可清晰的运用于此语言中。

点击(此处)折叠或打开

  1. var myJSONObject = {"bindings": [
  2.         {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^*"},
  3.         {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
  4.         {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
  5.     ]
  6. };
上面的示例,创建了一个包括单独成员”bindings”的对象,此成员包括一个含有三个对象(”ircEvent”, “method”, 与 “regex”)的数组

成员可以通过.或者下标操作符检索。

点击(此处)折叠或打开

  1. myJSONObject.bindings[0].method          // "newURI"
    为了将JSON文本转换为对象,可以使用eval()函数。eval()函数调用JavaScript编辑器。由于JSON是JavaScript的子集,因此编译器将正确的解析文本并产生对象结构。文本必须括在括号中避免产生JavaScript的语法歧义。

点击(此处)折叠或打开

  1. var myObject = eval('(' + myJSONtext + ')');
    eval函数非常快速。它可以编译执行任何JavaScript程序,因此产生了安全性问题。当使用可信任与完善的源代码时才可以使用eval函数。这样可以更安全的使用JSON解析器。使用XMLHttpRequest的web应用,页面之间的通讯只允许同源,因此是可以信任的。但这却不是完善的。如果服务器没有严谨的JSON编码,或者没有严格的输入验证,那么可能传送包括危险脚本的无效JSON文本。eval函数将执行恶意的脚本。

    使用JSON解析器可以防止此类事件。JSON解析器只能辨识JSON文本,拒绝所有脚本。提供了本地JSON支持的浏览器的JSON解析器将远快于eval函数。预计未来的ECMAScript标准将支持本地JSON。

点击(此处)折叠或打开

  1. var myObject = JSON.parse(myJSONtext, reviver);
    一个替换函数(reviver function)做为可选参数被最终结果的每一级的键(key)与值(value)调用。 每个值都将被替换函数的值代替。这可以用来将一般的类改变成伪类的实例,或者将日期字符串转变为日期对象。

点击(此处)折叠或打开

  1. myData = JSON.parse(text, function (key, value) {
  2.     var type;
  3.     if (value && typeof value === 'object') {
  4.         type = value.type;
  5.         if (typeof type === 'string' && typeof window[type] === 'function') {
  6.             return new (window[type])(value);
  7.         }
  8.     }
  9.     return value;
  10. });

JSON stringifier进行反向操作,可以把JavaScript数据结构转换为JSON文本。JSON不支持循环数据结构,因此应小心不要为JSON stringifier提供循环结构。

点击(此处)折叠或打开

  1. var myJSONText = JSON.stringify(myObject, replacer);
    如果stringify函数发现一个带有toJSON方法的对象,它将执行此方法,并且返回产生的值。这样一个对象就可以决定自己的JSON表现。

    stringifier方法可以携带一个可选的字符串数组。这些字符串被用于选择包括在JSON文本中的属性。

    stringifier方法可以携带一个可选的替代(replacer)函数。它将在结构中每个值的toJSON方法(如果有的话)后面执行。它将每个键与值做为参数传递,当然对象要包含这个键。返回值将被字符串化。

    如果没有提供数组或替代函数,一个用于忽略被集成的属性的可选替代函数将被提供。如果想要所有被继承的属性,可以提供一个简单的替换函数:

点击(此处)折叠或打开

  1. var myJSONText = JSON.stringify(myObject, function (key, value) {
  2.     return value;
  3. });

对于在JSON中没有表达的值(如函数与undefined)是排除在外的。

不能确定的数量将被替换为null。为了替代其它的值,可以像下面一样使用替换(replacer)函数

点击(此处)折叠或打开

  1. function replacer(key, value) {
  2.     if (typeof value === 'number' && !isFinite(value)) {
  3.         return String(value);
  4.     }
  5.     return value;
  6. }

通过可以小于2.5K。

阅读(1031) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~