2012-02-17 69 views
3

我想转储这个数组到字符串,并在评估它后得到相同的对象。如何转储JavaScript数据与函数评估字符串?

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

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

我不能找到一种方法,在节点做到这一点:

> 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' 

后者已flatterned数组。

有没有更好的方法?

更新:找到了满意的解决方案,看到了自己的答案。

回答

0

我发现了什么我满意:jsDump

2

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

进展:OP已经从标题中去掉 “JSON”。

+0

我已经改变了问题的标题。 :) – 2012-02-17 18:29:18

+0

我认为它可以代表功能。或者它可以吗? 因为我以前存储在MongoDB中 – 2012-02-17 18:38:41

+0

也许BSON能的功能,但是JSON不能:它适合在一个屏幕上:http://json.org – 2012-02-17 18:46:22

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']