From 0912109ffc86610161c769534df84400ccd1aa65 Mon Sep 17 00:00:00 2001 From: jeresig Date: Sat, 23 Jan 2010 16:51:51 -0500 Subject: [PATCH] Expose the JSON parsing logic. Fixes #5914. --- src/ajax.js | 18 +----------------- src/core.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index 502f00653..552d412f4 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -591,23 +591,7 @@ jQuery.extend({ if ( typeof data === "string" ) { // Get the JavaScript object, if JSON is used. if ( type === "json" || !type && ct.indexOf("json") >= 0 ) { - // 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 ); - } + data = jQuery.parseJSON( data ); // If the type is "script", eval it in global context } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) { 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() {},