我正在尝试使用nodejs解析这样的对象:
{
1: [a, b, c],
2: [d, e, f],
...
}
带有a,b,c,d,e,f
个定义值的变量。
我真的想要这样,以便对象可以真正可读(并且可由人类写入)。
所以,我目前正在做的是打开一个包含前一个对象的文件,将数据放入变量data
,然后注入
var a=1,b=2,c=3,d=4,e=5,f=6,...;
就在真实内容之前:
data = "var a=1,b=2,c=3,d=4,e=5,f=6,...;" + data;
最后,我使用eval()
来获取可用对象:
my_obj = eval(data);
但是,这不起作用(至少使用nodejs),在对象的第二个元素之后的:
标记上有一个SyntaxError(就在上一个示例中的2
之后)。
为了解决这个问题,我现在围绕着我的对象:
data = "var obj = " + data + "; obj";
data = "var a=1,b=2,c=3,d=4,e=5,f=6,...;" + data;
有了它,它就有用了。
问题是why ?
可选的问题是:你有更好的方法来完成我想要的吗?
谢谢!
eval()调用前的真实数据
带有SyntaxError的 data
:
var a='a',b='b',c='c',d='d',e='e',f='f';
{
a:
[a, a, a],
b:
[b, b, b]
}
Nodejs错误:
undefined:6
b:
^
SyntaxError: Unexpected token :
工作data
:
var a='a',b='b',c='c',d='d',e='e',f='f';
var obj = {
a:
[a, a, a],
b:
[b, b, b]
}
; obj;
答案 0 :(得分:2)
当你第一次评估时
{
a:
[a, a, a],
b:
[b, b, b]
}
括号实际上被视为分隔块的块分隔符(如if(){...})
所以你试图执行代码
a: [a, a, a], b: [b, b, b];
这显然是语法错误=>你得到“SyntaxError:Unexpected token:”
在第二种情况下,评估的代码是有效的javascript,这就是它工作的原因。
很难为您提供更好的替代方案。如果您的文件不可信,可以使用JSON.parse而不是直接评估。