将JS对象Stringify为JSON(将函数字符串化为属性)

时间:2010-06-24 17:08:44

标签: javascript json serialization

是否有一个函数或库将采用具有属性和函数的JS对象并将其字符串化为JSON但是当涉及到一个函数时,它会将其更改为属性并调用该函数以返回其值?

function object() {
    this.property = 12;
    this.function = function() { return "This"; }
} 

所以这将串行化为:

{property: 12, function: "This"}

有什么想法吗?只是好奇是否已经有一个..如果不是,我会采取一个刺。不应该很难扩展JSON.stringify()。

2 个答案:

答案 0 :(得分:2)

有些对象没有简单的序列化。 如果你希望序列化它们,你必须自己做一套假设。

函数(特别是带闭包的函数)和IO Streams就是一些例子。在JS函数的情况下,序列化(没有序列化整个上下文!)违反了关于执行上下文和范围链的函数的语义。此外,浏览器提供帮助以返回函数“文本”的能力取决于浏览器。

答案 1 :(得分:1)

JSON.stringify方法提供了包含一个名为replacer的回调参数的选项,该函数通过传递来调用您的对象的每个属性,您可以检测该值是否为function并调用它:

var obj = {
  "property": 12,
  "function": function() { return "This"; }
};

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