mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Core: Deprecate jQuery.parseJSON
Fixes gh-2800 Closes gh-2948
This commit is contained in:
parent
8a91f8442f
commit
93a8fa6bfc
@ -7,7 +7,6 @@ define( [
|
||||
"./ajax/var/rquery",
|
||||
|
||||
"./core/init",
|
||||
"./ajax/parseJSON",
|
||||
"./ajax/parseXML",
|
||||
"./event/trigger",
|
||||
"./deferred",
|
||||
@ -348,7 +347,7 @@ jQuery.extend( {
|
||||
"text html": true,
|
||||
|
||||
// Evaluate text as a json expression
|
||||
"text json": jQuery.parseJSON,
|
||||
"text json": JSON.parse,
|
||||
|
||||
// Parse text as xml
|
||||
"text xml": jQuery.parseXML
|
||||
|
@ -1,9 +0,0 @@
|
||||
define( [
|
||||
"../core"
|
||||
], function( jQuery ) {
|
||||
|
||||
jQuery.parseJSON = JSON.parse;
|
||||
|
||||
return jQuery.parseJSON;
|
||||
|
||||
} );
|
@ -35,7 +35,7 @@ function dataAttr( elem, key, data ) {
|
||||
|
||||
// Only convert to a number if it doesn't change the string
|
||||
+data + "" === data ? +data :
|
||||
rbrace.test( data ) ? jQuery.parseJSON( data ) :
|
||||
rbrace.test( data ) ? JSON.parse( data ) :
|
||||
data;
|
||||
} catch ( e ) {}
|
||||
|
||||
|
@ -23,4 +23,6 @@ jQuery.fn.extend( {
|
||||
}
|
||||
} );
|
||||
|
||||
jQuery.parseJSON = JSON.parse;
|
||||
|
||||
} );
|
||||
|
@ -1120,7 +1120,7 @@ QUnit.module( "ajax", {
|
||||
},
|
||||
success: function( text ) {
|
||||
assert.strictEqual( typeof text, "string", "json wasn't auto-determined" );
|
||||
var json = jQuery.parseJSON( text );
|
||||
var json = JSON.parse( text );
|
||||
assert.ok( json.length >= 2, "Check length" );
|
||||
assert.strictEqual( json[ 0 ][ "name" ], "John", "Check JSON: first, name" );
|
||||
assert.strictEqual( json[ 0 ][ "age" ], 21, "Check JSON: first, age" );
|
||||
|
@ -76,7 +76,7 @@ QUnit.test( "show/hide", function( assert ) {
|
||||
}
|
||||
|
||||
QUnit.test( "core", function( assert ) {
|
||||
assert.expect( 28 );
|
||||
assert.expect( 27 );
|
||||
|
||||
var elem = jQuery( "<div></div><span></span>" );
|
||||
|
||||
@ -135,8 +135,6 @@ QUnit.test( "core", function( assert ) {
|
||||
|
||||
assert.strictEqual( jQuery.parseHTML( "<div></div><span></span>" ).length,
|
||||
2, "jQuery.parseHTML" );
|
||||
|
||||
assert.deepEqual( jQuery.parseJSON( "{\"a\": 2}" ), { a: 2 }, "jQuery.parseJON" );
|
||||
} );
|
||||
|
||||
QUnit.test( "data", function( assert ) {
|
||||
|
@ -1548,93 +1548,6 @@ if ( jQuery.support.createHTMLDocument ) {
|
||||
} );
|
||||
}
|
||||
|
||||
QUnit.test( "jQuery.parseJSON", function( assert ) {
|
||||
assert.expect( 20 );
|
||||
|
||||
assert.strictEqual( jQuery.parseJSON( null ), null, "primitive null" );
|
||||
assert.strictEqual( jQuery.parseJSON( "0.88" ), 0.88, "Number" );
|
||||
assert.strictEqual(
|
||||
jQuery.parseJSON( "\" \\\" \\\\ \\/ \\b \\f \\n \\r \\t \\u007E \\u263a \"" ),
|
||||
" \" \\ / \b \f \n \r \t ~ \u263A ",
|
||||
"String escapes"
|
||||
);
|
||||
assert.deepEqual( jQuery.parseJSON( "{}" ), {}, "Empty object" );
|
||||
assert.deepEqual( jQuery.parseJSON( "{\"test\":1}" ), { "test": 1 }, "Plain object" );
|
||||
assert.deepEqual( jQuery.parseJSON( "[0]" ), [ 0 ], "Simple array" );
|
||||
|
||||
assert.deepEqual(
|
||||
jQuery.parseJSON( "[ \"string\", -4.2, 2.7180e0, 3.14E-1, {}, [], true, false, null ]" ),
|
||||
[ "string", -4.2, 2.718, 0.314, {}, [], true, false, null ],
|
||||
"Array of all data types"
|
||||
);
|
||||
assert.deepEqual(
|
||||
jQuery.parseJSON( "{ \"string\": \"\", \"number\": 4.2e+1, \"object\": {}," +
|
||||
"\"array\": [[]], \"boolean\": [ true, false ], \"null\": null }" ),
|
||||
{ string: "", number: 42, object: {}, array: [ [] ], "boolean": [ true, false ], "null": null },
|
||||
"Dictionary of all data types"
|
||||
);
|
||||
|
||||
assert.deepEqual( jQuery.parseJSON( "\n{\"test\":1}\t" ), { "test": 1 },
|
||||
"Leading and trailing whitespace are ignored" );
|
||||
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON();
|
||||
}, null, "Undefined raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "" );
|
||||
}, null, "Empty string raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "''" );
|
||||
}, null, "Single-quoted string raises an error" );
|
||||
/*
|
||||
|
||||
// Broken on IE8
|
||||
assert.throws(function() {
|
||||
jQuery.parseJSON("\" \\a \"");
|
||||
}, null, "Invalid string escape raises an error" );
|
||||
|
||||
// Broken on IE8, Safari 5.1 Windows
|
||||
assert.throws(function() {
|
||||
jQuery.parseJSON("\"\t\"");
|
||||
}, null, "Unescaped control character raises an error" );
|
||||
|
||||
// Broken on IE8
|
||||
assert.throws(function() {
|
||||
jQuery.parseJSON(".123");
|
||||
}, null, "Number with no integer component raises an error" );
|
||||
|
||||
*/
|
||||
assert.throws( function() {
|
||||
var result = jQuery.parseJSON( "0101" );
|
||||
|
||||
// Support: IE9+
|
||||
// Ensure base-10 interpretation on browsers that erroneously accept leading-zero numbers
|
||||
if ( result === 101 ) {
|
||||
throw new Error( "close enough" );
|
||||
}
|
||||
}, null, "Leading-zero number raises an error or is parsed as decimal" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "{a:1}" );
|
||||
}, null, "Unquoted property raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "{'a':1}" );
|
||||
}, null, "Single-quoted property raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "[,]" );
|
||||
}, null, "Array element elision raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "{},[]" );
|
||||
}, null, "Comma expression raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "[]\n,{}" );
|
||||
}, null, "Newline-containing comma expression raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "\"\"\n\"\"" );
|
||||
}, null, "Automatic semicolon insertion raises an error" );
|
||||
|
||||
assert.strictEqual( jQuery.parseJSON( [ 0 ] ), 0, "Input cast to string" );
|
||||
} );
|
||||
|
||||
QUnit.test( "jQuery.parseXML", function( assert ) {
|
||||
assert.expect( 8 );
|
||||
|
||||
|
@ -277,7 +277,7 @@ QUnit.test( "data-* attributes", function( assert ) {
|
||||
|
||||
var prop, i, l, metadata, elem,
|
||||
obj, obj2, check, num, num2,
|
||||
parseJSON = jQuery.parseJSON,
|
||||
parseJSON = JSON.parse,
|
||||
div = jQuery( "<div>" ),
|
||||
child = jQuery( "<div data-myobj='old data' data-ignored=\"DOM\" data-other='test' data-foo-42='boosh'></div>" ),
|
||||
dummy = jQuery( "<div data-myobj='old data' data-ignored=\"DOM\" data-other='test' data-foo-42='boosh'></div>" );
|
||||
@ -336,7 +336,7 @@ QUnit.test( "data-* attributes", function( assert ) {
|
||||
|
||||
// attribute parsing
|
||||
i = 0;
|
||||
jQuery.parseJSON = function() {
|
||||
JSON.parse = function() {
|
||||
i++;
|
||||
return parseJSON.apply( this, arguments );
|
||||
};
|
||||
@ -389,7 +389,7 @@ QUnit.test( "data-* attributes", function( assert ) {
|
||||
assert.strictEqual( child.data( "string" ), "test", "Typical string read from attribute" );
|
||||
assert.equal( i, 2, "Correct number of JSON parse attempts when reading from attributes" );
|
||||
|
||||
jQuery.parseJSON = parseJSON;
|
||||
JSON.parse = parseJSON;
|
||||
child.remove();
|
||||
|
||||
// tests from metadata plugin
|
||||
|
@ -39,4 +39,74 @@ QUnit.test( "delegate/undelegate", function( assert ) {
|
||||
.end()
|
||||
.undelegate( "b", "click" )
|
||||
.remove();
|
||||
} );
|
||||
} );
|
||||
|
||||
QUnit.test( "jQuery.parseJSON", function( assert ) {
|
||||
assert.expect( 20 );
|
||||
|
||||
assert.strictEqual( jQuery.parseJSON( null ), null, "primitive null" );
|
||||
assert.strictEqual( jQuery.parseJSON( "0.88" ), 0.88, "Number" );
|
||||
assert.strictEqual(
|
||||
jQuery.parseJSON( "\" \\\" \\\\ \\/ \\b \\f \\n \\r \\t \\u007E \\u263a \"" ),
|
||||
" \" \\ / \b \f \n \r \t ~ \u263A ",
|
||||
"String escapes"
|
||||
);
|
||||
assert.deepEqual( jQuery.parseJSON( "{}" ), {}, "Empty object" );
|
||||
assert.deepEqual( jQuery.parseJSON( "{\"test\":1}" ), { "test": 1 }, "Plain object" );
|
||||
assert.deepEqual( jQuery.parseJSON( "[0]" ), [ 0 ], "Simple array" );
|
||||
|
||||
assert.deepEqual(
|
||||
jQuery.parseJSON( "[ \"string\", -4.2, 2.7180e0, 3.14E-1, {}, [], true, false, null ]" ),
|
||||
[ "string", -4.2, 2.718, 0.314, {}, [], true, false, null ],
|
||||
"Array of all data types"
|
||||
);
|
||||
assert.deepEqual(
|
||||
jQuery.parseJSON( "{ \"string\": \"\", \"number\": 4.2e+1, \"object\": {}," +
|
||||
"\"array\": [[]], \"boolean\": [ true, false ], \"null\": null }" ),
|
||||
{ string: "", number: 42, object: {}, array: [ [] ], "boolean": [ true, false ], "null": null },
|
||||
"Dictionary of all data types"
|
||||
);
|
||||
|
||||
assert.deepEqual( jQuery.parseJSON( "\n{\"test\":1}\t" ), { "test": 1 },
|
||||
"Leading and trailing whitespace are ignored" );
|
||||
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON();
|
||||
}, null, "Undefined raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "" );
|
||||
}, null, "Empty string raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "''" );
|
||||
}, null, "Single-quoted string raises an error" );
|
||||
|
||||
assert.throws( function() {
|
||||
var result = jQuery.parseJSON( "0101" );
|
||||
|
||||
// Support: IE9+
|
||||
// Ensure base-10 interpretation on browsers that erroneously accept leading-zero numbers
|
||||
if ( result === 101 ) {
|
||||
throw new Error( "close enough" );
|
||||
}
|
||||
}, null, "Leading-zero number raises an error or is parsed as decimal" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "{a:1}" );
|
||||
}, null, "Unquoted property raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "{'a':1}" );
|
||||
}, null, "Single-quoted property raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "[,]" );
|
||||
}, null, "Array element elision raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "{},[]" );
|
||||
}, null, "Comma expression raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "[]\n,{}" );
|
||||
}, null, "Newline-containing comma expression raises an error" );
|
||||
assert.throws( function() {
|
||||
jQuery.parseJSON( "\"\"\n\"\"" );
|
||||
}, null, "Automatic semicolon insertion raises an error" );
|
||||
|
||||
assert.strictEqual( jQuery.parseJSON( [ 0 ] ), 0, "Input cast to string" );
|
||||
} );
|
||||
|
Loading…
Reference in New Issue
Block a user