登录模块加载中...
会员投稿 投稿指南 今天是:
打印本页 | 关闭窗口 | 双击滚屏 您的位置首页>>网页制作学习园地>>JSP教程>>工具.对象.设计>>与JSON相关的一些函数
与JSON相关的一些函数
来源:建站学 ‖ 作者: ‖ 点击: ‖ 时间:11-01-19 11:55:44 ‖ 【 】‖ 我要投稿

JSON作为一种轻量的数据传输格式,越来越受到人们的青睐。下面是我仿照Prototype的一些实现。

JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/, 

unfilterJSON:function(json,filter) { 

    return json.replace((filter || dom.JSONFilter), function(a,b){ 

        return b || ""

    }); 

},

JSONFilter完全抄自Prototype,因为后台基本上只会传输两种格式的东西给我们——文本(xmlhttp.responseText)与XML(xmlhttp.responseXML)。如果要json,我们可以eval一下,或者使用现代浏览器提供的JSON.parse方法。但问题就出在eval中,很容易出现XSS攻击。如果文本是注释就可以避免这问题,在Prototype中还检察一下请求的来源。对于自家的网站的请求,我们完全可以在请求前处理一下,让它变成如下格式:

var text = '/*-secure-\n{"name": "Violet", "occupation": "character", "age": 25}\n*/'

 dom.unfilterJSON(text) 

// -> '{"name": "Violet", "occupation": "character", "age": 25}'

到时我们用unfilterJSON函数提取合法的字段来eval就没问题了。

第二个函数,判断字符串是否符合JSON的格式。JSON是有固定的格式,要求键必须被双引号括起来。下面的函数提取自json2:

isJSONText:function(json){// 

    return /^[\],:{}\s]*$/.test(json.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") 

        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") 

        .replace(/(?:^|:|,)(?:\s*\[)+/g, "")); 

},

第三个函数,将符合JSON的格式的文本变成JSON对象。第二参数用于指明此文本是否安全(如,是否同源请求)。如果能用原生对象的parse方法就用原生的,否则动态解析它。之所以不用eval,是因为ecma那帮人头脑发热,想禁掉它。

        evalJSON: function( json ,sanitize) {   

            if ( !is(json,"String") || !json ) 

                return null; 

            json = dom.unfilterJSON(json); 

                        if ( !sanitize || dom.isJSONText(json) ) { 

                return window.JSON && window.JSON.parse ? 

                window.JSON.parse( json ) : (new Function("return " + json))(); 

            } else { 

                throw  "Invalid JSON: " + json; 

            } 

      &nb

|<< << < 1 2 3 4 5 > >> >>|
加入收藏:  加入收藏夹  | 发送给好友:  发送给好友
责任编辑:admin
相关文章列表
请文明参与讨论,禁止漫骂攻击。  
网友评论