1

我正在尝试使用 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]

}

节点错误:

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;
4

1 回答 1

2

当你第一次评估

{
 a: 
 [a, a, a],
 b:
 [b, b, b]
}

括号实际上被视为分隔块的块分隔符(如 if () { ... })

所以你正在尝试执行代码

 a: [a, a, a], b: [b, b, b];

这显然是一个语法错误 => 你得到“SyntaxError: Unexpected token :”

在第二种情况下,评估的代码是有效的 javascript,这就是它起作用的原因。

很难为您提供更好的替代方案。如果您的文件不可信,也许可以使用 JSON.parse 而不是直接评估。

于 2012-05-28T22:40:35.603 回答