我正在尝试重新实现JSON.stringify。我无法弄清楚如何将{'a':'apple'}这样的对象变成{“a”:“apple”}。
我已经能够通过像
这样的代码对字符串进行字符串化var a = "a";
console.log('"' + a + '"');
console.log(JSON.stringify(a));
console.log(JSON.stringify(a) === '"' + a + '"'); //true
但是同样的方法似乎不适用于对象键。
下面是我的代码试图重新实现JSON.stringify
var stringifyJSON = function(obj) {
if (typeof obj === "function" || typeof obj === "symbol" || typeof obj === "undefined"){
console.log("I'm a function, symbol or undefined")
return undefined;
} else if (obj.toString() === "[object Object]") { //objects that aren't arrays
console.log("I'm an object");
var newObj = {};
for (var key in obj) {
var newKey = '"' + key + '"';
if (typeof obj[key] === "function" || typeof obj[key] === "symbol" || typeof obj[key] === undefined) {
console.log("I'm a function, symbol or undefined in an object")
continue;
} else if (typeof obj[key] !== "object") {
newObj[newKey] = obj[key];
} else {
newObj[newKey] = stringifyJSON(obj[key]);
}
}
return newObj;
}
};
console.log(stringifyJSON({'a': 'apple'})); /*{ '"a"': 'apple' } in node, {"a": "apple"} in chrome*/
console.log(JSON.stringify({'a': 'apple'})); /*{"a":"apple"} in node and chrome*/
所以我的输出实际上在Chrome中看起来是正确的,但我在Chrome和节点中通过深度等于函数运行了我的输出w / stringifyJSON和JSON.stringify,并且两次都失败了。
那么我如何获得双引号来包围对象中的键和值以正确地重新创建JSON.stringify呢?