所以你可以用JSON.stringify中的数字,字符串,数组或对象替换属性,如下所示:
var myObj = {
'allstar': aFunction;
}
function myReplacer(key, value) {
if(key === 'allstar') {
return 'newFunction()';
}
}
JSON.stringify(myObj, myReplacer); //returns '{"allstar": "newFunction()"}'
但你可以更改它,以便它返回'{"allstar": newFunction()}'
(newFunction
周围没有引号)?
答案 0 :(得分:0)
我假设typeof aFunction == "function"
?如果是这样,即使JSON.stringify(myObj)
也不会按照您的意愿执行操作,但返回'{}'
即没有属性的对象,因为JSON不支持函数。
您想要的结果甚至不是有效的JSON。不带引号的newFunction()
不是受支持的值(字符串,数字,数组,对象,布尔值,null)。
编辑:您可以尝试在替换器中返回newfunction.toString()
,这应该将您的函数源作为字符串传递。在转换JSON时,您必须eval()
此字符串才能获得实际功能。
答案 1 :(得分:0)
@derpirscher提供了一个非常好的答案,可能会得到比这个更多的赞成,但这是我的首选答案:
根据derpirscher的回答,我决定制作我自己的JSON.stringify版本会更容易,它允许你用你自己的源代码替换属性,并改变模块的名称,这样就没有了命名与JSON冲突。
它在我的github帐户上: https://github.com/johnlarson/xerxes