使用函数表达式对对象进行字符串化 - javascript

时间:2014-08-21 09:05:24

标签: javascript json function expression stringify

有可能吗?我需要使用函数表达式对js对象进行字符串化,其他字段上的所有值类型都不会更改。

示例:

我有这样的javascript对象 -

var obj = {
    propText: "some text",
    propBool: true,
    propNum: 12345,
    method: function () {
       // some logic here
    }
};

不幸的是,如果我使用JSON.stringify(obj);,它将返回不带method的字符串..

然后我可以使用这样的替换器功能:

JSON.stringify(obj, function (key, val) {
  if (typeof val === 'function') {
    return '' + val;
  }
  return val;
});

这会给我带来像"function () { ... }" ..

这样的函数的字符串

我尝试的另一个选项更复杂但结果仍然有点不可接受 - 使用自定义stringify函数将包装JSON.stringify然后替换字符串中的占位符

var stringify = function (obj, prop) {
  var placeholder = '____PLACEHOLDER____';
  var fns = [];
  var json = JSON.stringify(obj, function(key, value) {
    if (typeof value === 'function') {
      fns.push(value);
      return placeholder;
    }
    return value;
  });
  json = json.replace(new RegExp('"' + placeholder + '"', 'g'), function(_) {
    return fns.shift();
  });
  return json;
};

但是这个函数是不可接受的,例如,如果你传递另一个值:

JSON.stringify(22); // outputs 22 typeof number
stringify(22); // outputs 22 typeof function because of .replace() :(

我希望我的字符串化对象看起来像:

'{
    "propText": "some text",
    "propBool": true,
    "propNum": 12345,
    "method": function () { ... }
}'

0 个答案:

没有答案