2010-09-24 48 views
0

我有一个功能一个JSON对象:将json对象转换为json字符串并使用它的函数?

var thread = { 
    title: "my title", 
    delete: function() { 
     alert("deleted"); 
    } 
}; 

thread.delete(); // alerted "deleted" 

thread_json = JSON.encode(thread); // convert to json from object 

thread_object = JSON.decode(thread_json); // convert to object from json 

thread_object.delete(); // this didn't work 

后,我将它转换回来从JSON字符串到对象,我不能用delete()函数。

当你将东西转换成json时,函数不见了?

有没有办法让他们在json字符串中?

我正在使用Mootools。

+1

这不是'json对象'。没有'json对象'。 JSON是一种文本格式...文本来表示对象。不,JSON对象表示不包含函数......你可以做的最好的事情是将函数体包含为文本,并在解析JSON字符串之后通过'Function'创建一个函数。 – 2010-09-24 03:28:08

+1

JSON不保留函数。 – 2010-09-24 03:28:29

+2

按定义,JSON(格式)**不能保留函数**。这里是官方的规范:http://json.org – slebetman 2010-09-24 03:59:52

回答

2

你明白了。看看JSON.encode输出。在JSON表示中只允许使用简单的数据类型,部分是为了便于创建,部分是为了安全。 (我们之所以使用这样的JSON.decode代替eval被嵌入功能的可能性。)

你必须修改JSON库的源代码接受功能,或为了保存的字面定义编写自己的将对象转换为字符串。

尽管如此,你可能并不需要这样做。可能有更好的解决方案,但如果不知道确切的情况,我就无法开始解决这个问题。

+0

另外,一旦你的编码函数在你的序列化字符串中,那么根据定义它不再是一个JSON字符串(更准确的说,它是一个无效的JSON字符串)。 – slebetman 2010-09-24 03:58:51

相关问题