From 7392b16d4512b4473fda7ec6a7d82054a3c4af94 Mon Sep 17 00:00:00 2001 From: JiHyung Lee Date: Thu, 12 Nov 2015 16:26:39 +0900 Subject: [PATCH 1/3] =?UTF-8?q?IE8=EC=97=90=EC=84=9C=20=ED=95=9C=EA=B8=80?= =?UTF-8?q?=EC=9D=B4=20=ED=8F=AC=ED=95=A8=EB=90=9C=20JSON=EC=9D=84=20strin?= =?UTF-8?q?g=EC=9C=BC=EB=A1=9C=20=EB=B3=80=ED=99=98=20=ED=95=A0=20?= =?UTF-8?q?=EB=95=8C=20=EC=9D=B8=EC=BD=94=EB=94=A9=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/jquery.json.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/jquery.json.js b/src/jquery.json.js index 264715c..fb7a6eb 100644 --- a/src/jquery.json.js +++ b/src/jquery.json.js @@ -14,6 +14,12 @@ */ (function ($) { 'use strict'; + + // IE8에서 한글이 포함된 JSON Object를 JSON.stringify를 통해 변환 할 경우, + // 유니코드로 인코딩 처리되는 현상을 방지하기 위해 메소드를 추가 정의합니다. + // IE8에서 한글 변환시 다음과 같은 오류가 발생합니다. + // ex: '수정금지' -> '\uc218\uc815\uae08\uc9c0' + var oldIe = !document.addEventListener; var escape = /["\\\x00-\x1f\x7f-\x9f]/g, meta = { @@ -26,7 +32,7 @@ '\\': '\\\\' }, hasOwn = Object.prototype.hasOwnProperty; - + /** * jQuery.toJSON * Converts the given argument into a JSON representation. @@ -38,7 +44,8 @@ * function. * */ - $.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) { + //$.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) { + $.toJSON = typeof JSON === 'object' && (JSON.stringify && !oldIE) ? JSON.stringify : function (o) { if (o === null) { return 'null'; } From 24268240abcaf00c9e726ead1940fa6bc75f13b7 Mon Sep 17 00:00:00 2001 From: JiHyung Lee Date: Thu, 12 Nov 2015 16:45:37 +0900 Subject: [PATCH 2/3] minified --- dist/jquery.json.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/jquery.json.min.js b/dist/jquery.json.min.js index 44e246f..b2d0ab1 100644 --- a/dist/jquery.json.min.js +++ b/dist/jquery.json.min.js @@ -1,2 +1,2 @@ /*! jQuery JSON plugin v2.5.1 | github.com/Krinkle/jquery-json */ -!function($){"use strict";var escape=/["\\\x00-\x1f\x7f-\x9f]/g,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},hasOwn=Object.prototype.hasOwnProperty;$.toJSON="object"==typeof JSON&&JSON.stringify?JSON.stringify:function(a){if(null===a)return"null";var b,c,d,e,f=$.type(a);if("undefined"===f)return void 0;if("number"===f||"boolean"===f)return String(a);if("string"===f)return $.quoteString(a);if("function"==typeof a.toJSON)return $.toJSON(a.toJSON());if("date"===f){var g=a.getUTCMonth()+1,h=a.getUTCDate(),i=a.getUTCFullYear(),j=a.getUTCHours(),k=a.getUTCMinutes(),l=a.getUTCSeconds(),m=a.getUTCMilliseconds();return 10>g&&(g="0"+g),10>h&&(h="0"+h),10>j&&(j="0"+j),10>k&&(k="0"+k),10>l&&(l="0"+l),100>m&&(m="0"+m),10>m&&(m="0"+m),'"'+i+"-"+g+"-"+h+"T"+j+":"+k+":"+l+"."+m+'Z"'}if(b=[],$.isArray(a)){for(c=0;cu&&(u="0"+u),10>f&&(f="0"+f),10>a&&(a="0"+a),10>l&&(l="0"+l),10>c&&(c="0"+c),100>p&&(p="0"+p),10>p&&(p="0"+p),'"'+s+"-"+u+"-"+f+"T"+a+":"+l+":"+c+"."+p+'Z"'}if(t=[],$.isArray(e)){for(r=0;r Date: Thu, 12 Nov 2015 16:48:50 +0900 Subject: [PATCH 3/3] changed file encoding --- dist/jquery.json.min.js | 2 +- src/jquery.json.js | 282 ++++++++++++++++++++-------------------- 2 files changed, 142 insertions(+), 142 deletions(-) diff --git a/dist/jquery.json.min.js b/dist/jquery.json.min.js index b2d0ab1..1c31092 100644 --- a/dist/jquery.json.min.js +++ b/dist/jquery.json.min.js @@ -1,2 +1,2 @@ /*! jQuery JSON plugin v2.5.1 | github.com/Krinkle/jquery-json */ -!function($){"use strict";var oldIE=!document.addEventListener,escape=/["\\\x00-\x1f\x7f-\x9f]/g,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},hasOwn=Object.prototype.hasOwnProperty;$.toJSON="object"==typeof JSON&&JSON.stringify&&!oldIE?JSON.stringify:function(e){if(null===e)return"null";var t,r,n,o,i=$.type(e);if("undefined"===i)return void 0;if("number"===i||"boolean"===i)return String(e);if("string"===i)return $.quoteString(e);if("function"==typeof e.toJSON)return $.toJSON(e.toJSON());if("date"===i){var u=e.getUTCMonth()+1,f=e.getUTCDate(),s=e.getUTCFullYear(),a=e.getUTCHours(),l=e.getUTCMinutes(),c=e.getUTCSeconds(),p=e.getUTCMilliseconds();return 10>u&&(u="0"+u),10>f&&(f="0"+f),10>a&&(a="0"+a),10>l&&(l="0"+l),10>c&&(c="0"+c),100>p&&(p="0"+p),10>p&&(p="0"+p),'"'+s+"-"+u+"-"+f+"T"+a+":"+l+":"+c+"."+p+'Z"'}if(t=[],$.isArray(e)){for(r=0;ru&&(u="0"+u),10>f&&(f="0"+f),10>a&&(a="0"+a),10>l&&(l="0"+l),10>c&&(c="0"+c),100>p&&(p="0"+p),10>p&&(p="0"+p),'"'+s+"-"+u+"-"+f+"T"+a+":"+l+":"+c+"."+p+'Z"'}if(t=[],$.isArray(e)){for(r=0;r */ (function ($) { - 'use strict'; - - // IE8에서 한글이 포함된 JSON Object를 JSON.stringify를 통해 변환 할 경우, - // 유니코드로 인코딩 처리되는 현상을 방지하기 위해 메소드를 추가 정의합니다. - // IE8에서 한글 변환시 다음과 같은 오류가 발생합니다. - // ex: '수정금지' -> '\uc218\uc815\uae08\uc9c0' - var oldIe = !document.addEventListener; - - var escape = /["\\\x00-\x1f\x7f-\x9f]/g, + 'use strict'; + + // IE8에서 한글이 포함된 JSON Object를 JSON.stringify를 통해 변환 할 경우, + // 유니코드로 인코딩 처리되는 현상을 방지하기 위해 메소드를 추가 정의합니다. + // IE8에서 한글 변환시 다음과 같은 오류가 발생합니다. + // ex: '수정금지' -> '\uc218\uc815\uae08\uc9c0' + var oldIE = !document.addEventListener; + + var escape = /["\\\x00-\x1f\x7f-\x9f]/g, meta = { - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"': '\\"', - '\\': '\\\\' + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"': '\\"', + '\\': '\\\\' }, hasOwn = Object.prototype.hasOwnProperty; - - /** + + /** * jQuery.toJSON * Converts the given argument into a JSON representation. * @@ -44,36 +44,36 @@ * function. * */ - //$.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) { - $.toJSON = typeof JSON === 'object' && (JSON.stringify && !oldIE) ? JSON.stringify : function (o) { - if (o === null) { - return 'null'; - } + //$.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) { + $.toJSON = typeof JSON === 'object' && (JSON.stringify && !oldIE) ? JSON.stringify : function (o) { + if (o === null) { + return 'null'; + } - var pairs, k, name, val, + var pairs, k, name, val, type = $.type(o); - if (type === 'undefined') { - return undefined; - } - - // Also covers instantiated Number and Boolean objects, - // which are typeof 'object' but thanks to $.type, we - // catch them here. I don't know whether it is right - // or wrong that instantiated primitives are not - // exported to JSON as an {"object":..}. - // We choose this path because that's what the browsers did. - if (type === 'number' || type === 'boolean') { - return String(o); - } - if (type === 'string') { - return $.quoteString(o); - } - if (typeof o.toJSON === 'function') { - return $.toJSON(o.toJSON()); - } - if (type === 'date') { - var month = o.getUTCMonth() + 1, + if (type === 'undefined') { + return undefined; + } + + // Also covers instantiated Number and Boolean objects, + // which are typeof 'object' but thanks to $.type, we + // catch them here. I don't know whether it is right + // or wrong that instantiated primitives are not + // exported to JSON as an {"object":..}. + // We choose this path because that's what the browsers did. + if (type === 'number' || type === 'boolean') { + return String(o); + } + if (type === 'string') { + return $.quoteString(o); + } + if (typeof o.toJSON === 'function') { + return $.toJSON(o.toJSON()); + } + if (type === 'date') { + var month = o.getUTCMonth() + 1, day = o.getUTCDate(), year = o.getUTCFullYear(), hours = o.getUTCHours(), @@ -81,105 +81,105 @@ seconds = o.getUTCSeconds(), milli = o.getUTCMilliseconds(); - if (month < 10) { - month = '0' + month; - } - if (day < 10) { - day = '0' + day; - } - if (hours < 10) { - hours = '0' + hours; - } - if (minutes < 10) { - minutes = '0' + minutes; - } - if (seconds < 10) { - seconds = '0' + seconds; - } - if (milli < 100) { - milli = '0' + milli; - } - if (milli < 10) { - milli = '0' + milli; - } - return '"' + year + '-' + month + '-' + day + 'T' + + if (month < 10) { + month = '0' + month; + } + if (day < 10) { + day = '0' + day; + } + if (hours < 10) { + hours = '0' + hours; + } + if (minutes < 10) { + minutes = '0' + minutes; + } + if (seconds < 10) { + seconds = '0' + seconds; + } + if (milli < 100) { + milli = '0' + milli; + } + if (milli < 10) { + milli = '0' + milli; + } + return '"' + year + '-' + month + '-' + day + 'T' + hours + ':' + minutes + ':' + seconds + '.' + milli + 'Z"'; - } - - pairs = []; - - if ($.isArray(o)) { - for (k = 0; k < o.length; k++) { - pairs.push($.toJSON(o[k]) || 'null'); - } - return '[' + pairs.join(',') + ']'; - } - - // Any other object (plain object, RegExp, ..) - // Need to do typeof instead of $.type, because we also - // want to catch non-plain objects. - if (typeof o === 'object') { - for (k in o) { - // Only include own properties, - // Filter out inherited prototypes - if (hasOwn.call(o, k)) { - // Keys must be numerical or string. Skip others - type = typeof k; - if (type === 'number') { - name = '"' + k + '"'; - } else if (type === 'string') { - name = $.quoteString(k); - } else { - continue; - } - type = typeof o[k]; - - // Invalid values like these return undefined - // from toJSON, however those object members - // shouldn't be included in the JSON string at all. - if (type !== 'function' && type !== 'undefined') { - val = $.toJSON(o[k]); - pairs.push(name + ':' + val); - } - } - } - return '{' + pairs.join(',') + '}'; - } - }; - - /** + } + + pairs = []; + + if ($.isArray(o)) { + for (k = 0; k < o.length; k++) { + pairs.push($.toJSON(o[k]) || 'null'); + } + return '[' + pairs.join(',') + ']'; + } + + // Any other object (plain object, RegExp, ..) + // Need to do typeof instead of $.type, because we also + // want to catch non-plain objects. + if (typeof o === 'object') { + for (k in o) { + // Only include own properties, + // Filter out inherited prototypes + if (hasOwn.call(o, k)) { + // Keys must be numerical or string. Skip others + type = typeof k; + if (type === 'number') { + name = '"' + k + '"'; + } else if (type === 'string') { + name = $.quoteString(k); + } else { + continue; + } + type = typeof o[k]; + + // Invalid values like these return undefined + // from toJSON, however those object members + // shouldn't be included in the JSON string at all. + if (type !== 'function' && type !== 'undefined') { + val = $.toJSON(o[k]); + pairs.push(name + ':' + val); + } + } + } + return '{' + pairs.join(',') + '}'; + } + }; + + /** * jQuery.evalJSON * Evaluates a given json string. * * @param str {String} */ - $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) { - /*jshint evil: true */ - return eval('(' + str + ')'); - }; + $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) { + /*jshint evil: true */ + return eval('(' + str + ')'); + }; - /** + /** * jQuery.secureEvalJSON * Evals JSON in a way that is *more* secure. * * @param str {String} */ - $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) { - var filtered = + $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) { + var filtered = str .replace(/\\["\\\/bfnrtu]/g, '@') .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') .replace(/(?:^|:|,)(?:\s*\[)+/g, ''); - if (/^[\],:{}\s]*$/.test(filtered)) { - /*jshint evil: true */ - return eval('(' + str + ')'); - } - throw new SyntaxError('Error parsing JSON, source is not valid.'); - }; + if (/^[\],:{}\s]*$/.test(filtered)) { + /*jshint evil: true */ + return eval('(' + str + ')'); + } + throw new SyntaxError('Error parsing JSON, source is not valid.'); + }; - /** + /** * jQuery.quoteString * Returns a string-repr of a string, escaping quotes intelligently. * Mostly a support function for toJSON. @@ -190,18 +190,18 @@ * >>> jQuery.quoteString('"Where are we going?", she asked.') * "\"Where are we going?\", she asked." */ - $.quoteString = function (str) { - if (str.match(escape)) { - return '"' + str.replace(escape, function (a) { - var c = meta[a]; - if (typeof c === 'string') { - return c; - } - c = a.charCodeAt(); - return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); - }) + '"'; - } - return '"' + str + '"'; - }; - -}(jQuery)); + $.quoteString = function (str) { + if (str.match(escape)) { + return '"' + str.replace(escape, function (a) { + var c = meta[a]; + if (typeof c === 'string') { + return c; + } + c = a.charCodeAt(); + return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); + }) + '"'; + } + return '"' + str + '"'; + }; + +}(jQuery)); \ No newline at end of file