【发布时间】:2012-05-28 22:03:12
【问题描述】:
我正在尝试使用 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() 调用前的真实数据
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;
【问题讨论】:
-
你能在
eval()之前给我们data的确切值吗? -
@ldiqual 已编辑以在
eval()调用之前添加有效和无效数据。 -
您的“不工作”
data中没有作业。你只是把{ }没有var obj = { }。此外,“working-data”最后一行的obj应该做什么? -
@ldiqual
eval()返回执行的最后一条语句的结果。在我的“工作”案例中,这是obj(没有它,eval()返回一个未定义的对象)。在“不工作”的情况下,我希望{...}对象是最后一个语句,因此会被返回。
标签: javascript node.js object eval