aboutsummaryrefslogtreecommitdiff
path: root/src/utility.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-01-03 15:16:17 -0800
committerAlon Zakai <alonzakai@gmail.com>2014-01-03 15:16:17 -0800
commit8478d6aee54d6c52de16d8c58309534afbf5bf9e (patch)
treebec73fd8e0cd6888d2dfb6b9e6a1423cc2432f61 /src/utility.js
parent1a007b1631509b9d72499a8f4402294017ee04dc (diff)
parenta8e26049c1a72fa6b19dac45fa2b44616f94241a (diff)
Merge branch 'incoming'
Diffstat (limited to 'src/utility.js')
-rw-r--r--src/utility.js8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/utility.js b/src/utility.js
index cd27b209..178c596b 100644
--- a/src/utility.js
+++ b/src/utility.js
@@ -346,13 +346,19 @@ function sortedJsonCompare(x, y) {
return true;
}
+function escapeJSONKey(x) {
+ if (/^[\d\w_]+$/.exec(x) || x[0] === '"' || x[0] === "'") return x;
+ assert(x.indexOf("'") < 0, 'cannot have internal single quotes in keys: ' + x);
+ return "'" + x + "'";
+}
+
function stringifyWithFunctions(obj) {
if (typeof obj === 'function') return obj.toString();
if (obj === null || typeof obj !== 'object') return JSON.stringify(obj);
if (isArray(obj)) {
return '[' + obj.map(stringifyWithFunctions).join(',') + ']';
} else {
- return '{' + keys(obj).map(function(key) { return key + ':' + stringifyWithFunctions(obj[key]) }).join(',') + '}';
+ return '{' + keys(obj).map(function(key) { return escapeJSONKey(key) + ':' + stringifyWithFunctions(obj[key]) }).join(',') + '}';
}
}