diff options
author | jeresig <jeresig@gmail.com> | 2010-01-23 16:51:51 -0500 |
---|---|---|
committer | jeresig <jeresig@gmail.com> | 2010-01-23 16:51:51 -0500 |
commit | 0912109ffc86610161c769534df84400ccd1aa65 (patch) | |
tree | 625f0814076bac82596d4e487cd12b77189b7a4d /src/core.js | |
parent | a6ef036bb6a3610431471eebc2623bf8ad06bdd6 (diff) | |
download | jquery-0912109ffc86610161c769534df84400ccd1aa65.tar.gz jquery-0912109ffc86610161c769534df84400ccd1aa65.zip |
Expose the JSON parsing logic. Fixes #5914.
Diffstat (limited to 'src/core.js')
-rw-r--r-- | src/core.js | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/core.js b/src/core.js index 3ff95e020..5c9906888 100644 --- a/src/core.js +++ b/src/core.js @@ -470,6 +470,28 @@ jQuery.extend({ error: function( msg ) { throw msg; }, + + parseJSON: function( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") + .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") + .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) { + + // Try to use the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + data = window.JSON.parse( data ); + + } else { + data = (new Function("return " + data))(); + } + + } else { + jQuery.error( "Invalid JSON: " + data ); + } + + return data; + }, noop: function() {}, |