Changeset 34863
- Timestamp:
- 10/06/2015 02:01:52 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/js/json2.js
r21592 r34863 1 1 /* 2 http://www.JSON.org/json2.js3 201 1-02-232 json2.js 3 2015-05-03 4 4 5 5 Public Domain. … … 18 18 19 19 This file creates a global JSON object containing two methods: stringify 20 and parse. 20 and parse. This file is provides the ES5 JSON capability to ES3 systems. 21 If a project might run on IE8 or earlier, then this file should be included. 22 This file does nothing on ES5 systems. 21 23 22 24 JSON.stringify(value, replacer, space) … … 49 51 function f(n) { 50 52 // Format integers to have at least two digits. 51 return n < 10 ? '0' + n : n; 53 return n < 10 54 ? '0' + n 55 : n; 52 56 } 53 57 … … 95 99 96 100 text = JSON.stringify([new Date()], function (key, value) { 97 return this[key] instanceof Date ? 98 'Date(' + this[key] + ')' : value; 101 return this[key] instanceof Date 102 ? 'Date(' + this[key] + ')' 103 : value; 99 104 }); 100 105 // text is '["Date(---current time---)"]' … … 147 152 */ 148 153 149 /*jslint evil: true, strict: false, regexp: false */ 150 151 /*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, 152 call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, 154 /*jslint 155 eval, for, this 156 */ 157 158 /*property 159 JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, 153 160 getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, 154 161 lastIndex, length, parse, prototype, push, replace, slice, stringify, … … 160 167 // methods in a closure to avoid creating global variables. 161 168 162 var JSON; 163 if (!JSON) { 169 if (typeof JSON !== 'object') { 164 170 JSON = {}; 165 171 } 166 172 167 173 (function () { 168 "use strict"; 174 'use strict'; 175 176 var rx_one = /^[\],:{}\s]*$/, 177 rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, 178 rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, 179 rx_four = /(?:^|:|,)(?:\s*\[)+/g, 180 rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, 181 rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; 169 182 170 183 function f(n) { 171 184 // Format integers to have at least two digits. 172 return n < 10 ? '0' + n : n; 185 return n < 10 186 ? '0' + n 187 : n; 188 } 189 190 function this_value() { 191 return this.valueOf(); 173 192 } 174 193 175 194 if (typeof Date.prototype.toJSON !== 'function') { 176 195 177 Date.prototype.toJSON = function (key) { 178 179 return isFinite(this.valueOf()) ? 180 this.getUTCFullYear() + '-' + 181 f(this.getUTCMonth() + 1) + '-' + 182 f(this.getUTCDate()) + 'T' + 183 f(this.getUTCHours()) + ':' + 184 f(this.getUTCMinutes()) + ':' + 185 f(this.getUTCSeconds()) + 'Z' : null; 196 Date.prototype.toJSON = function () { 197 198 return isFinite(this.valueOf()) 199 ? this.getUTCFullYear() + '-' + 200 f(this.getUTCMonth() + 1) + '-' + 201 f(this.getUTCDate()) + 'T' + 202 f(this.getUTCHours()) + ':' + 203 f(this.getUTCMinutes()) + ':' + 204 f(this.getUTCSeconds()) + 'Z' 205 : null; 186 206 }; 187 207 188 String.prototype.toJSON = 189 Number.prototype.toJSON = 190 Boolean.prototype.toJSON = function (key) { 191 return this.valueOf(); 192 }; 193 } 194 195 var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, 196 escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, 197 gap, 208 Boolean.prototype.toJSON = this_value; 209 Number.prototype.toJSON = this_value; 210 String.prototype.toJSON = this_value; 211 } 212 213 var gap, 198 214 indent, 199 meta = { // table of character substitutions 200 '\b': '\\b', 201 '\t': '\\t', 202 '\n': '\\n', 203 '\f': '\\f', 204 '\r': '\\r', 205 '"' : '\\"', 206 '\\': '\\\\' 207 }, 215 meta, 208 216 rep; 209 217 … … 216 224 // sequences. 217 225 218 escapable.lastIndex = 0; 219 return escapable.test(string) ? '"' + string.replace(escapable, function (a) { 220 var c = meta[a]; 221 return typeof c === 'string' ? c : 222 '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); 223 }) + '"' : '"' + string + '"'; 226 rx_escapable.lastIndex = 0; 227 return rx_escapable.test(string) 228 ? '"' + string.replace(rx_escapable, function (a) { 229 var c = meta[a]; 230 return typeof c === 'string' 231 ? c 232 : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); 233 }) + '"' 234 : '"' + string + '"'; 224 235 } 225 236 … … 261 272 // JSON numbers must be finite. Encode non-finite numbers as null. 262 273 263 return isFinite(value) ? String(value) : 'null'; 274 return isFinite(value) 275 ? String(value) 276 : 'null'; 264 277 265 278 case 'boolean': … … 304 317 // brackets. 305 318 306 v = partial.length === 0 ? '[]' : gap ? 307 '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : 308 '[' + partial.join(',') + ']'; 319 v = partial.length === 0 320 ? '[]' 321 : gap 322 ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' 323 : '[' + partial.join(',') + ']'; 309 324 gap = mind; 310 325 return v; … … 320 335 v = str(k, value); 321 336 if (v) { 322 partial.push(quote(k) + (gap ? ': ' : ':') + v); 337 partial.push(quote(k) + ( 338 gap 339 ? ': ' 340 : ':' 341 ) + v); 323 342 } 324 343 } … … 332 351 v = str(k, value); 333 352 if (v) { 334 partial.push(quote(k) + (gap ? ': ' : ':') + v); 353 partial.push(quote(k) + ( 354 gap 355 ? ': ' 356 : ':' 357 ) + v); 335 358 } 336 359 } … … 341 364 // and wrap them in braces. 342 365 343 v = partial.length === 0 ? '{}' : gap ? 344 '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : 345 '{' + partial.join(',') + '}'; 366 v = partial.length === 0 367 ? '{}' 368 : gap 369 ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' 370 : '{' + partial.join(',') + '}'; 346 371 gap = mind; 347 372 return v; … … 352 377 353 378 if (typeof JSON.stringify !== 'function') { 379 meta = { // table of character substitutions 380 '\b': '\\b', 381 '\t': '\\t', 382 '\n': '\\n', 383 '\f': '\\f', 384 '\r': '\\r', 385 '"': '\\"', 386 '\\': '\\\\' 387 }; 354 388 JSON.stringify = function (value, replacer, space) { 355 389 … … 433 467 434 468 text = String(text); 435 cx.lastIndex = 0;436 if ( cx.test(text)) {437 text = text.replace( cx, function (a) {469 rx_dangerous.lastIndex = 0; 470 if (rx_dangerous.test(text)) { 471 text = text.replace(rx_dangerous, function (a) { 438 472 return '\\u' + 439 ('0000' + a.charCodeAt(0).toString(16)).slice(-4);473 ('0000' + a.charCodeAt(0).toString(16)).slice(-4); 440 474 }); 441 475 } … … 454 488 // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. 455 489 456 if (/^[\],:{}\s]*$/ 457 .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') 458 .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') 459 .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { 490 if ( 491 rx_one.test( 492 text 493 .replace(rx_two, '@') 494 .replace(rx_three, ']') 495 .replace(rx_four, '') 496 ) 497 ) { 460 498 461 499 // In the third stage we use the eval function to compile the text into a … … 469 507 // each name/value pair to a reviver function for possible transformation. 470 508 471 return typeof reviver === 'function' ? 472 walk({'': j}, '') : j; 509 return typeof reviver === 'function' 510 ? walk({'': j}, '') 511 : j; 473 512 } 474 513
Note: See TracChangeset
for help on using the changeset viewer.