我想将此数组转储为字符串,并在评估后获取相同的对象。
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'
后者使阵列变得扁平化。
有更好的方法吗?
更新:找到了满意的解决方案,请参阅我自己的答案。
答案 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
当您无法访问代码时,它将不具备所有必需的上下文,但在被撤消时它至少不会引发参考错误。