From 8d3b7ab31c1289e1425d1f4f348b7ca0021ab7fe Mon Sep 17 00:00:00 2001 From: John Christopher Anderson Date: Tue, 26 Jan 2010 00:11:59 +0000 Subject: Replace the old JavaScript query server JSON library with json2.js This change makes us interoperate better with other JSON implementations. It also means we can use the native JSON handlers in JavaScript runtimes that support them. Should be faster right away on new Spidermonkeys. There are some potential breaking changes for apps that depend on Couch blowing up on 'undefined'. json2.js serialized undefined as 'null' instead of crashing. This change will also affect people using E4X, as you can't just return an XML object and have it serialized to a string for you. Calling .toXMLString() on these is all you need to do. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@903023 13f79535-47bb-0310-9956-ffa450edef68 --- share/server/util.js | 64 +++------------------------------------------------- 1 file changed, 3 insertions(+), 61 deletions(-) (limited to 'share/server/util.js') diff --git a/share/server/util.js b/share/server/util.js index bd4abc1d..c2e6600f 100644 --- a/share/server/util.js +++ b/share/server/util.js @@ -13,14 +13,7 @@ var Couch = { // moving this away from global so we can move to json2.js later toJSON : function (val) { - if (typeof(val) == "undefined") { - throw "Cannot encode 'undefined' value as JSON"; - } - if (typeof(val) == "xml") { // E4X support - val = val.toXMLString(); - } - if (val === null) { return "null"; } - return (Couch.toJSON.dispatcher[val.constructor.name])(val); + return JSON.stringify(val); }, compileFunction : function(source) { if (!source) throw(["error","not_found","missing function"]); @@ -47,55 +40,6 @@ var Couch = { } } -Couch.toJSON.subs = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', - '\r': '\\r', '"' : '\\"', '\\': '\\\\'}; -Couch.toJSON.dispatcher = { - "Array": function(v) { - var buf = []; - for (var i = 0; i < v.length; i++) { - buf.push(Couch.toJSON(v[i])); - } - return "[" + buf.join(",") + "]"; - }, - "Boolean": function(v) { - return v.toString(); - }, - "Date": function(v) { - var f = function(n) { return n < 10 ? '0' + n : n }; - return '"' + v.getUTCFullYear() + '-' + - f(v.getUTCMonth() + 1) + '-' + - f(v.getUTCDate()) + 'T' + - f(v.getUTCHours()) + ':' + - f(v.getUTCMinutes()) + ':' + - f(v.getUTCSeconds()) + 'Z"'; - }, - "Number": function(v) { - return isFinite(v) ? v.toString() : "null"; - }, - "Object": function(v) { - //if (v === null) return "null"; - var buf = []; - for (var k in v) { - if (!v.hasOwnProperty(k) || typeof(k) !== "string" || v[k] === undefined) { - continue; - } - buf.push(Couch.toJSON(k) + ": " + Couch.toJSON(v[k])); - } - return "{" + buf.join(",") + "}"; - }, - "String": function(v) { - if (/["\\\x00-\x1f]/.test(v)) { - v = v.replace(/([\x00-\x1f\\"])/g, function(a, b) { - var c = Couch.toJSON.subs[b]; - if (c) return c; - c = b.charCodeAt(); - return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); - }); - } - return '"' + v + '"'; - } -}; - // prints the object as JSON, and rescues and logs any toJSON() related errors function respond(obj) { try { @@ -107,10 +51,8 @@ function respond(obj) { }; function log(message) { - // return; // idea: query_server_config option for log level - if (typeof message == "undefined") { - message = "Error: attempting to log message of 'undefined'."; - } else if (typeof message != "string") { + // idea: query_server_config option for log level + if (typeof message != "string") { message = Couch.toJSON(message); } respond(["log", message]); -- cgit v1.2.3