用JSON.stringify中的代码替换数据字段?

时间:2014-06-26 00:39:10

标签: json replace stringify

所以你可以用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周围没有引号)?

2 个答案:

答案 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