129 lines
No EOL
12 KiB
HTML
129 lines
No EOL
12 KiB
HTML
<html><head><title>JSON.js</title><link rel="stylesheet" type="text/css" href="../style.css" media="screen"/></head><body><div class="hl-main"><pre><span class="hl-comment">/**
|
|
* @class YAHOO.ext.util.JSON
|
|
* Modified version of Douglas Crockford's json.js that doesn't
|
|
* mess with the Object prototype
|
|
* </span><span class="hl-url">http://www.json.org/js.html</span><span class="hl-comment">
|
|
* @singleton
|
|
*/
|
|
</span><span class="hl-identifier">YAHOO</span><span class="hl-default">.</span><span class="hl-identifier">ext</span><span class="hl-default">.</span><span class="hl-identifier">util</span><span class="hl-default">.</span><span class="hl-identifier">JSON</span><span class="hl-default"> = </span><span class="hl-reserved">new function</span><span class="hl-brackets">(){
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">useHasOwn</span><span class="hl-code"> = </span><span class="hl-brackets">{}</span><span class="hl-code">.</span><span class="hl-identifier">hasOwnProperty</span><span class="hl-code"> ? </span><span class="hl-reserved">true</span><span class="hl-code"> : </span><span class="hl-reserved">false</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">validRE</span><span class="hl-code"> = </span><span class="hl-quotes">/</span><span class="hl-string">^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$</span><span class="hl-quotes">/</span><span class="hl-code">;
|
|
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">pad</span><span class="hl-code"> = </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">n</span><span class="hl-brackets">) {
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">n</span><span class="hl-code"> < </span><span class="hl-number">10</span><span class="hl-code"> ? </span><span class="hl-quotes">'</span><span class="hl-string">0</span><span class="hl-quotes">'</span><span class="hl-code"> + </span><span class="hl-identifier">n</span><span class="hl-code"> : </span><span class="hl-identifier">n</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">;
|
|
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">m</span><span class="hl-code"> = </span><span class="hl-brackets">{
|
|
</span><span class="hl-quotes">'</span><span class="hl-string">\b</span><span class="hl-quotes">'</span><span class="hl-code">: </span><span class="hl-quotes">'</span><span class="hl-special">\\</span><span class="hl-string">b</span><span class="hl-quotes">'</span><span class="hl-code">,
|
|
</span><span class="hl-quotes">'</span><span class="hl-string">\t</span><span class="hl-quotes">'</span><span class="hl-code">: </span><span class="hl-quotes">'</span><span class="hl-special">\\</span><span class="hl-string">t</span><span class="hl-quotes">'</span><span class="hl-code">,
|
|
</span><span class="hl-quotes">'</span><span class="hl-string">\n</span><span class="hl-quotes">'</span><span class="hl-code">: </span><span class="hl-quotes">'</span><span class="hl-special">\\</span><span class="hl-string">n</span><span class="hl-quotes">'</span><span class="hl-code">,
|
|
</span><span class="hl-quotes">'</span><span class="hl-string">\f</span><span class="hl-quotes">'</span><span class="hl-code">: </span><span class="hl-quotes">'</span><span class="hl-special">\\</span><span class="hl-string">f</span><span class="hl-quotes">'</span><span class="hl-code">,
|
|
</span><span class="hl-quotes">'</span><span class="hl-string">\r</span><span class="hl-quotes">'</span><span class="hl-code">: </span><span class="hl-quotes">'</span><span class="hl-special">\\</span><span class="hl-string">r</span><span class="hl-quotes">'</span><span class="hl-code">,
|
|
</span><span class="hl-quotes">'</span><span class="hl-string">"</span><span class="hl-quotes">'</span><span class="hl-code"> : </span><span class="hl-quotes">'</span><span class="hl-special">\\</span><span class="hl-string">"</span><span class="hl-quotes">'</span><span class="hl-code">,
|
|
</span><span class="hl-quotes">'</span><span class="hl-special">\\</span><span class="hl-quotes">'</span><span class="hl-code">: </span><span class="hl-quotes">'</span><span class="hl-special">\\\\</span><span class="hl-quotes">'
|
|
</span><span class="hl-brackets">}</span><span class="hl-code">;
|
|
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">encodeString</span><span class="hl-code"> = </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">s</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-quotes">/</span><span class="hl-string">["\\\x00-\x1f]</span><span class="hl-quotes">/</span><span class="hl-code">.</span><span class="hl-identifier">test</span><span class="hl-brackets">(</span><span class="hl-identifier">s</span><span class="hl-brackets">)) {
|
|
</span><span class="hl-reserved">return </span><span class="hl-quotes">'</span><span class="hl-string">"</span><span class="hl-quotes">'</span><span class="hl-code"> + </span><span class="hl-identifier">s</span><span class="hl-code">.</span><span class="hl-identifier">replace</span><span class="hl-brackets">(</span><span class="hl-quotes">/</span><span class="hl-string">([\x00-\x1f\\"])</span><span class="hl-quotes">/g</span><span class="hl-code">, </span><span class="hl-reserved">function</span><span class="hl-brackets">(</span><span class="hl-identifier">a</span><span class="hl-code">, </span><span class="hl-identifier">b</span><span class="hl-brackets">) {
|
|
</span><span class="hl-reserved">var </span><span class="hl-identifier">c</span><span class="hl-code"> = </span><span class="hl-identifier">m</span><span class="hl-brackets">[</span><span class="hl-identifier">b</span><span class="hl-brackets">]</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">c</span><span class="hl-brackets">){
|
|
</span><span class="hl-reserved">return </span><span class="hl-identifier">c</span><span class="hl-code">;
|
|
</span><span class="hl-brackets">}
|
|
</span><span class="hl-identifier">c</span><span class="hl-code"> = </span><span class="hl-identifier">b</span><span class="hl-code">.</span><span class="hl-identifier">charCodeAt</span><span class="hl-brackets">()</span><span class="hl-code">;
|
|
</span><span class="hl-reserved">return </span><span class="hl-quotes">'</span><span class="hl-special">\\</span><span class="hl-string">u00</span><span class="hl-quotes">'</span><span class="hl-code"> +
|
|
</span><span class="hl-builtin">Math</span><span class="hl-code">.</span><span class="hl-identifier">floor</span><span class="hl-brackets">(</span><span class="hl-identifier">c </span><span class="hl-quotes">/</span><span class="hl-string"> 16).toString(16) +
|
|
(c % 16).toString(16);
|
|
}) + '"';
|
|
}
|
|
return '"' + s + '"';
|
|
};
|
|
|
|
var encodeArray = function(o){
|
|
var a = ['['], b, i, l = o.length, v;
|
|
for (i = 0; i < l; i += 1) {
|
|
v = o[i];
|
|
switch (typeof v) {
|
|
case 'undefined':
|
|
case 'function':
|
|
case 'unknown':
|
|
break;
|
|
default:
|
|
if (b) {
|
|
a.push(',');
|
|
}
|
|
a.push(v === null ? "null" : YAHOO.ext.util.JSON.encode(v));
|
|
b = true;
|
|
}
|
|
}
|
|
a.push(']');
|
|
return a.join('');
|
|
};
|
|
|
|
var encodeDate = function(o){
|
|
return '"' + o.getFullYear() + '-' +
|
|
pad(o.getMonth() + 1) + '-' +
|
|
pad(o.getDate()) + 'T' +
|
|
pad(o.getHours()) + ':' +
|
|
pad(o.getMinutes()) + ':' +
|
|
pad(o.getSeconds()) + '"';
|
|
};
|
|
|
|
</span><span class="hl-quotes">/</span><span class="hl-code">**
|
|
* </span><span class="hl-identifier">Encodes an Object</span><span class="hl-code">, </span><span class="hl-builtin">Array </span><span class="hl-identifier">or other value</span><span class="hl-code">
|
|
* @</span><span class="hl-identifier">param </span><span class="hl-brackets">{</span><span class="hl-identifier">Mixed</span><span class="hl-brackets">} </span><span class="hl-identifier">o The variable to encode</span><span class="hl-code">
|
|
* @</span><span class="hl-reserved">return </span><span class="hl-brackets">{</span><span class="hl-builtin">String</span><span class="hl-brackets">} </span><span class="hl-identifier">The JSON string</span><span class="hl-code">
|
|
*</span><span class="hl-quotes">/</span><span class="hl-string">
|
|
this.encode = function(o){
|
|
if(typeof o == 'undefined' || o === null){
|
|
return 'null';
|
|
}else if(o instanceof Array){
|
|
return encodeArray(o);
|
|
}else if(o instanceof Date){
|
|
return encodeDate(o);
|
|
}else if(typeof o == 'string'){
|
|
return encodeString(o);
|
|
}else if(typeof o == 'number'){
|
|
return isFinite(o) ? String(o) : "null";
|
|
}else if(typeof o == 'boolean'){
|
|
return String(o);
|
|
}else {
|
|
var a = ['{'], b, i, v;
|
|
for (var i in o) {
|
|
if(!useHasOwn || o.hasOwnProperty(i)) {
|
|
v = o[i];
|
|
switch (typeof v) {
|
|
case 'undefined':
|
|
case 'function':
|
|
case 'unknown':
|
|
break;
|
|
default:
|
|
if(b){
|
|
a.push(',');
|
|
}
|
|
a.push(this.encode(i), ':',
|
|
v === null ? "null" : this.encode(v));
|
|
b = true;
|
|
}
|
|
}
|
|
}
|
|
a.push('}');
|
|
return a.join('');
|
|
}
|
|
};
|
|
|
|
</span><span class="hl-quotes">/</span><span class="hl-code">**
|
|
* </span><span class="hl-identifier">Decodes </span><span class="hl-brackets">(</span><span class="hl-identifier">parses</span><span class="hl-brackets">) </span><span class="hl-identifier">a JSON string to an object</span><span class="hl-code">. </span><span class="hl-identifier">If the JSON is invalid</span><span class="hl-code">, </span><span class="hl-reserved">this function throws </span><span class="hl-identifier">a SyntaxError</span><span class="hl-code">.
|
|
* @</span><span class="hl-identifier">param </span><span class="hl-brackets">{</span><span class="hl-builtin">String</span><span class="hl-brackets">} </span><span class="hl-identifier">json The JSON string</span><span class="hl-code">
|
|
* @</span><span class="hl-reserved">return </span><span class="hl-brackets">{</span><span class="hl-identifier">Object</span><span class="hl-brackets">} </span><span class="hl-identifier">The resulting object</span><span class="hl-code">
|
|
*</span><span class="hl-quotes">/</span><span class="hl-string">
|
|
this.decode = function(json){
|
|
try{
|
|
if(validRE.test(json)) {
|
|
return eval('(' + json + ')');
|
|
}
|
|
}catch(e){
|
|
}
|
|
throw new SyntaxError("parseJSON");
|
|
};
|
|
}();</span></pre></div><hr>Copyright © 2006 Jack Slocum. All rights reserved.</body></html> |