如何将带有函数的javascript数据转储到eval-able字符串?

时间:2012-02-17 18:24:45

标签: javascript node.js

我想将此数组转储为字符串,并在评估后获取相同的对象。

arr = [5, 86, function() { console.log(arguments); }, [console.log, 357]];

虽然函数可能有额外的属性,但只需要代码来重现。

我找不到在Node中执行此操作的方法:

> console.log(arr)
[5, 86, [Function] [ [Function], 357] ]

> util.format('%j', arr)
'[5,86,null,[null,357]]'

> arr.toString()
'5,86,function () { console.log(arguments); },function () {\n  process.stdout.write(util.format.apply(this, arguments) + \'\\n\');\n},357'

后者使阵列变得扁平化。

有更好的方法吗?

更新:找到了满意的解决方案,请参阅我自己的答案。

5 个答案:

答案 0 :(得分:2)

JSON不能代表函数。没有办法将您的数组放入JSON中。人们经常使用术语“JSON”来表示任何Javascript对象文字。它不是:它是严格定义的数据格式。

更新:OP已从标题中删除了“JSON”。

答案 1 :(得分:0)

因为函数不是可识别的JSON数据类型,您必须对它们进行字符串化。这是一个来自野外的例子:https://github.com/mikeal/node.couchapp.js/blob/master/main.js#L122

答案 2 :(得分:0)

如果我有你的权利,你想把它变平为一个字符串,同时保留原文然后将其转换回数组?

var original = ['a','b','c'];
var str = original.toString();
var newAgain = str.split(',');

console.log(original); //['a','b','c']
console.log(str);// "a,b,c"
console.log(newAgain); //['a','b','c']

答案 3 :(得分:0)

我找到了令我满意的地方: jsDump

答案 4 :(得分:0)

https://github.com/Benvie/JASON

当您无法访问代码时,它将不具备所有必需的上下文,但在被撤消时它至少不会引发参考错误。