序列化JavaScript对象

时间:2012-11-29 21:02:14

标签: javascript json

我正在尝试将JavaScript对象序列化为json,稍后将其反序列化为其原始形式。

困难之处在于它不仅仅是我需要序列化的原语。例如:

function Foo() {
    this.bar = "Hello World";
}

Foo.prototype.baz = function() {
    alert(this.bar);
}

var qux = new Foo();

我如何序列化qux?如果我只是JSON.stringify然后JSON.parse,我将无法拨打qux.baz()

是否有任何标准或工具或技术可以做到这一点?有什么提示指出我正确的方向?

感谢。

2 个答案:

答案 0 :(得分:3)

  

JavaScript对象 JSON

不幸的是,您无法将完整对象序列化为JSON,因为JSON规范不允许序列化函数。

但您可以创建自己的序列化标准。您可以将其称为Javascript Frozen Object(JSFO),这是一个很好的名称,因为在其他语言中,您尝试做的通常称为“冻结”。或者如果你想要一个类似于JSON的名字你可以称之为Javascript Frozen(或Full?)Object Notation(JSFON)。

实施相当简单。您可以从任何实现它的库中复制JSON代码,如jQuery或YUI。或者您可以从json.org下载任何参考实现,并将其修改为stringify函数。

要对函数进行字符串化,您基本上需要执行以下操作:

if (typeof obj == 'function') {
    return '"' + key + '":' + obj.toString();
}

将类似内容插入到任何JSON字符串化库中。

但请不要将其称为JSON,因为JSON是一种具有已发布规范的非常具体的数据格式。

答案 1 :(得分:0)

我开始关注JSON documentation on MDN,特别是JSON.stringify