亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

與JSON相關的一些函數

2024-09-05 00:23:39
字體:
來源:轉載
供稿:網友

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; 

            } 

        } 

//http://www.21kaiyun.com

var data =dom.evalJSON( '{ "name": "Violet", "occupation": "character" }'); 

data.name; 

//-> "Violet"

第四函數,將JSON對象變成文本。

// http://www.49028c.com

//   var a = [1,2,3,4,{aa:8}]; puts(dom.toJSON(a)) 

toJSON:function(obj){ 

    if (window.JSON && window.JSON.stringify) { 

        return JSON.stringify(obj) 

    } 

    if (typeof window.uneval == 'function') { 

        return uneval(obj); 

    } 

    if (typeof obj == 'object') { 

        if (!obj) { 

            return 'null'; 

        } 

        var list = []; 

        if (dom.is(obj,"Array")) { 

            for (var i=0,n=obj.length;i <n;i++) { 

                list.push(dom.toJSON(obj[i])); 

            } 

            return '[' + list.join(',') + ']'; 

        } else { 

            for (var prop in obj) { 

                if(obj[has](prop)) 

                    list.push('"' + prop + '":' + dom.toJSON(obj[prop])); 

            } 

            return '{' + list.join(',') + '}'; 

        } 

    } else if (typeof obj == 'string') { 

        return '"' + obj.replace(/(["'])/g, '//$1') + '"'; 

    } else { 

        return new String(obj); 

    } 

},

toJSON : function(obj) { 

    if(is(window.JSON,"JSON")){ 

        return JSON.stringify(obj) 

    } 

    function f(n) { 

        return n < 10 ? '0' + n : n; 

    } 

    var escapable = /[///"/x00-/x1f/x7f-/x9f/u00ad/u0600-/u0604/u070f/u17b4/u17b5/u200c-/u200f/u2028-/u202f/u2060-/u206f/ufeff/ufff0-/uffff]/g; 

    var meta = { 

        '/b': '//b', 

        '/t': '//t', 

        '/n': '//n', 

        '/f': '//f', 

        '/r': '//r', 

        '"' : '//"', 

        '//': '////'

    }; 

    function _char(c) { 

        return meta[c] ? meta[c] :'//u'+('0000'+(+(c.charCodeAt(0))).toString(16)).slice(-4); 

    } 

    function _string(s) { 

        return '"' + s.replace(escapable, _char) + '"'; 

    } 

    if(is(obj,"Date")){ 

        return  '"' + obj.getUTCFullYear() + '-' + 

        f(obj.getUTCMonth() + 1) + '-' + 

        f(obj.getUTCDate())      + 'T' + 

        f(obj.getUTCHours())     + ':' + 

        f(obj.getUTCMinutes())   + ':' + 

        f(obj.getUTCSeconds())   + 'Z"' ; 

    }else if(is(obj,"Number")){ 

        return isFinite(obj) ? obj+'' : 'null'; 

    }else if(is(obj,"Boolean")){ 

        return  obj+''

    }else if(is(obj,"String")){ 

        return _string(obj) 

    }else if(obj === null){ 

        return "null"

    }else if(is(obj,"Array")){ 

        return '[' + (dom.filter(obj,function(value){ 

            return dom.toJSON(value) !== undefined; 

        })).join(', ') + ']'; 

    }else if(is(obj,"Object")){ 

        var results = []; 

        dom.each(obj,function(value,key){ 

            value = dom.toJSON(value) 

            if (!value) 

                results.push(dom.toJSON(key) + ': ' + value); 

        }); 

        return '{' + results.join(', ') + '}'; 

    }else { 

        return undefined; 

    } 

},

Is函數

目前最精確的判定方法(不包括自定義類型)

//2011.1.19更新 

        var is = function (obj,type) { 

        return (type === "Null" && obj === null) || 

        (type === "Undefined" && obj === void 0 ) || 

        (type === "Number" && isFinite(obj)) || 

         Object.prototype.toString.call(obj).slice(8,-1) === type; 

    },

用法如下:

//***************示例一,判定數組與函數 

        var forEach = function(array,fn,bind){ 

          if(is(array,"Array") && is(Array.forEach,"Function")){ 

            array.forEach(fn,bind); 

          }else{ 

            for(var i=0,n=array.length;i<n;i++){ 

              i in array && fn.call(bind,array[i],i,array) 

            } 

          } 

        } 

//***************示例二,判定null 

var a = null

alert(is(a,"Null")) 

//***************示例二,判定undefined 

var b 

alert(is(b,"Undefined"))

另一個變種,直接返回表示類型的字符串

var getType = function (obj) { 

  var _toString = Object.prototype.toString,undefined; 

  return obj === null? "Null": 

    obj === undefined ? "Undefined": 

    _toString.call(obj).slice(8,-1); 

};

用法:

var arr = [1,2,3,4] 

      alert(getType(arr));//Array 

      var nil = null

      alert(getType(nil))//Null 

      var und ; 

      alert(getType(und))//Undefined 

      var spans = document.getElementsByTagName("span"); 

      alert(getType(spans)) //HTMLCollection 

      alert(getType(spans[0].childNodes))//NodeList

 

function isA (thing, canon) { 

  // special case for null and undefined 

  if (thing == null || canon == null) { 

    return thing === canon; 

  } 

  return Object.getPrototypeOf(Object(thing)) == Object.getPrototypeOf(Object(canon)); 

function isBool (thing) { 

  return isA(thing, true); 

function isNumber (thing) { 

  return isA(thing, 0) && isFinite(thing); 

function isString (thing) { 

  return isA(thing, ""); 

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久999| 国产精品亚洲激情| 亚洲综合小说区| 精品久久久久久中文字幕一区奶水| 伊人一区二区三区久久精品| 国产成人精品优优av| 国产一区深夜福利| 国产日韩精品在线| 成人看片人aa| 亚洲精品视频中文字幕| 国产裸体写真av一区二区| 尤物九九久久国产精品的分类| 亚洲tv在线观看| 欧美尤物巨大精品爽| 久久97久久97精品免视看| 日韩av中文字幕在线播放| 欧美精品第一页在线播放| 奇米成人av国产一区二区三区| 亚洲精品久久久久久下一站| 亚洲字幕在线观看| 精品国产一区二区三区在线观看| 亚洲国产欧美久久| 亚洲精品成人网| 欧美国产第一页| 91精品国产自产在线老师啪| 国产亚洲美女久久| 亚洲一区二区日本| 国产99在线|中文| 欧美二区在线播放| 成人在线免费观看视视频| www.午夜精品| 欧美日韩国产丝袜另类| 欧美国产第二页| 国产欧美一区二区三区久久| 欧美性色xo影院| 欧美在线国产精品| 欧美激情成人在线视频| 中文字幕精品国产| 欧美在线激情视频| 国产精品精品久久久久久| 国产精品白嫩初高中害羞小美女| 国产z一区二区三区| 日韩成人中文电影| 国产精品久久久久久久久影视| 国产v综合ⅴ日韩v欧美大片| 欧美精品一区二区免费| 午夜精品久久久久久久久久久久| 亚洲综合中文字幕在线| 久久久av亚洲男天堂| 亚洲国产精品久久| 2021久久精品国产99国产精品| 日韩av在线免播放器| 国产精品视频一区国模私拍| 日韩av在线电影网| 久久精品电影网| 欧美成人免费va影院高清| 日韩欧美国产视频| 91久久精品国产| 亚洲综合成人婷婷小说| 欧美性色视频在线| 欧美在线视频一区| 国产精品扒开腿做爽爽爽视频| 色无极亚洲影院| 91网站免费观看| 日韩精品免费一线在线观看| 欧美视频在线看| 日韩在线资源网| 青青久久av北条麻妃海外网| 久久精品国产久精国产一老狼| 日韩在线观看免费av| 国产精品视频在线播放| 国产精品久久久久国产a级| 亲爱的老师9免费观看全集电视剧| 清纯唯美日韩制服另类| 91色视频在线观看| 97视频在线观看网址| 亚洲xxx大片| 日韩国产在线播放| 日韩在线观看免费全集电视剧网站| 亚洲综合成人婷婷小说| 中日韩美女免费视频网址在线观看| 色综久久综合桃花网| 日本韩国在线不卡| 亚洲国产精品高清久久久| 国产一区二区在线免费| 91香蕉电影院| 国产精品老女人精品视频| 国产精品69久久久久| 欧美在线观看日本一区| 欧美福利视频在线| 亚洲va电影大全| 日韩乱码在线视频| 4p变态网欧美系列| 亚洲伊人久久大香线蕉av| 亚洲第一中文字幕| 2018日韩中文字幕| 神马久久久久久| 久久青草精品视频免费观看| 中文字幕亚洲欧美日韩在线不卡| 亚洲欧美日韩在线一区| 国产精品亚洲综合天堂夜夜| 国产精品视频一区国模私拍| 日本精品中文字幕| 欧美黄色片视频| 日韩三级成人av网| 中文字幕精品影院| 国产一区二区三区四区福利| 国产精品27p| 日韩精品福利网站| 亚洲国产古装精品网站| 国模精品一区二区三区色天香| 亚洲男人天天操| 欧美日韩爱爱视频| 欧美亚洲国产精品| 亚洲最大福利视频网| 久久99国产精品久久久久久久久| 2019中文字幕在线观看| 亚洲在线免费视频| 国产成人亚洲精品| 懂色av中文一区二区三区天美| 精品女厕一区二区三区| 91精品国产乱码久久久久久久久| 国产精品99久久久久久www| 欧美极度另类性三渗透| 日本成人免费在线| 亚洲欧美日韩天堂一区二区| 日韩电影在线观看永久视频免费网站| 久久精品在线播放| 97欧美精品一区二区三区| 欧美日韩另类字幕中文| 国产精品wwww| 日韩在线一区二区三区免费视频| 91亚洲国产精品| 亚洲福利视频专区| 国产精品久久久久9999| 欧美与欧洲交xxxx免费观看| 琪琪第一精品导航| 人九九综合九九宗合| 情事1991在线| 亚洲热线99精品视频| 日韩中文字幕在线观看| 97久久久免费福利网址| 九色精品美女在线| 国产欧美最新羞羞视频在线观看| 最近2019免费中文字幕视频三| 亚洲网站在线播放| 久久99久久亚洲国产| 国产91色在线免费| 日本一欧美一欧美一亚洲视频| 国产精品精品久久久| 91老司机精品视频| 日韩av综合中文字幕| 欧美激情精品久久久| 欧美精品亚州精品| 97在线观看免费高清| 欧美亚洲另类制服自拍| 久久亚洲精品一区二区| 亚洲qvod图片区电影| 粉嫩av一区二区三区免费野| xxxxx91麻豆| 欧美日韩激情视频| 亚洲精品资源在线| 欧洲日本亚洲国产区| 成人免费高清完整版在线观看|