如何对对象键进行字符串化

时间:2016-09-23 21:03:52

标签: javascript json object key stringify

我正在尝试重新实现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呢?

0 个答案:

没有答案