aboutsummaryrefslogtreecommitdiffstats
path: root/src/ajax/parseJSON.js
diff options
context:
space:
mode:
authorTimmy Willison <timmywillisn@gmail.com>2013-09-08 21:05:07 -0400
committerTimmy Willison <timmywillisn@gmail.com>2013-09-08 21:12:58 -0400
commit44596aa8f2cc908c73bc149fccbcc0f8458a330a (patch)
treeefdb578e20becb8601132f3f8a9ca1d351ebcfb3 /src/ajax/parseJSON.js
parent48e13e9a5f9ab1ec0ce576d35271c8f2c7c7554d (diff)
downloadjquery-44596aa8f2cc908c73bc149fccbcc0f8458a330a.tar.gz
jquery-44596aa8f2cc908c73bc149fccbcc0f8458a330a.zip
Move parsing methods to their own files (separates manipulation dependency from core)
Conflicts: src/core.js
Diffstat (limited to 'src/ajax/parseJSON.js')
-rw-r--r--src/ajax/parseJSON.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/ajax/parseJSON.js b/src/ajax/parseJSON.js
new file mode 100644
index 000000000..ff678623e
--- /dev/null
+++ b/src/ajax/parseJSON.js
@@ -0,0 +1,41 @@
+define([
+ "../core"
+], function( jQuery ) {
+
+ var rvalidchars = /^[\],:{}\s]*$/,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;
+
+ jQuery.parseJSON = function( data ) {
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
+ if ( data === null ) {
+ return data;
+ }
+
+ if ( typeof data === "string" ) {
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ if ( data ) {
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
+
+ return ( new Function( "return " + data ) )();
+ }
+ }
+ }
+
+ jQuery.error( "Invalid JSON: " + data );
+ };
+
+ return jQuery.parseJSON;
+});