Blame view

app/bower_components/jquery/src/ajax/parseJSON.js 1.44 KB
f986e111b   TRUONG   add libs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  define([
  	"../core"
  ], function( jQuery ) {
  
  var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r
  ]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
  
  jQuery.parseJSON = function( data ) {
  	// Attempt to parse using the native JSON parser first
  	if ( window.JSON && window.JSON.parse ) {
  		// Support: Android 2.3
  		// Workaround failure to string-cast null input
  		return window.JSON.parse( data + "" );
  	}
  
  	var requireNonComma,
  		depth = null,
  		str = jQuery.trim( data + "" );
  
  	// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
  	// after removing valid tokens
  	return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
  
  		// Force termination if we see a misplaced comma
  		if ( requireNonComma && comma ) {
  			depth = 0;
  		}
  
  		// Perform no more replacements after returning to outermost depth
  		if ( depth === 0 ) {
  			return token;
  		}
  
  		// Commas must not follow "[", "{", or ","
  		requireNonComma = open || comma;
  
  		// Determine new depth
  		// array/object open ("[" or "{"): depth += true - false (increment)
  		// array/object close ("]" or "}"): depth += false - true (decrement)
  		// other cases ("," or primitive): depth += true - true (numeric cast)
  		depth += !close - !open;
  
  		// Remove this token
  		return "";
  	}) ) ?
  		( Function( "return " + str ) )() :
  		jQuery.error( "Invalid JSON: " + data );
  };
  
  return jQuery.parseJSON;
  
  });