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 を使用して) 機能せず:、オブジェクトの 2 番目の要素の後のトークンに SyntaxError が発生します (前の例の の直後2)。

これを修正するために、オブジェクトを次のように囲んでいます:

data = "var obj = " + data + "; obj";
data = "var a=1,b=2,c=3,d=4,e=5,f=6,...;" + data;

それで、それは機能します。

質問はwhy ?

オプションの質問は次のとおりです。私が望むことを達成するためのより良い方法はありますか?

ありがとう!


eval() 呼び出し前の実データ

dataSyntaxError で:

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

1 に答える 1

2

最初に評価するとき

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

括弧は、実際にはブロックを区切るブロック区切り文字と見なされます (if () { ... } のように)

だからあなたはコードを実行しようとしています

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

これは明らかに構文エラーです => 「SyntaxError: Unexpected token :」が表示されます

2 番目のケースでは、評価されたコードは有効な JavaScript であるため、機能します。

より良い代替案についてアドバイスすることは困難です。ファイルが信頼できない場合は、直接評価する代わりに JSON.parse を使用してください。

于 2012-05-28T22:40:35.603 に答える