web-dev-qa-db-ja.com

Eval()=予期しないトークン:エラー

私はこの単純なJavaScriptコードを試しました:

eval('{"Topics":["toto","tata","titi"]}')

たとえば、Chromeコンソールでは、これは

SyntaxError:予期しないトークン :

JSONLint でJSONを試しましたが、有効です。

バグがありますか?

17
Tuizi

FWIW、使用 JSON.parse 代わりに。 evalより安全です。

11
Jonathan M

あなたはこのように書かなければなりません

eval('('+stingJson+')' );

文字列をオブジェクトに変換する

私が助けてくれることを願っています!

34
Martin Varta

evalしない式コンテキストを強制し、提供される文字列は無効 JavaScriptプログラムであるため、最初の3つのトークン(およびそれらの表示方法)は:

{            // <-- beginning of a block, and NOT an Object literal
"Topics"     // <-- string value, okay (note this is NOT a label)
:            // <-- huh? expecting ";" or "}" or an operator, etc.

ハッピーコーディング。

26
user166390

ナンバーワン:evalを使用しないでください。

二番。 evalは何かを作成するためにのみ使用し、十分に評価してください。たとえば:

eval('var topics = {"Topics":["toto","tata","titi"]}');
9

それはオブジェクトを評価しているからです。 eval()では、構文的に有効なjavascriptを渡す必要があり、実行しているのはベアオブジェクトを渡すことだけです。呼び出しは次のようになります。

eval('var x = {"Topics":etc...}');
4
Marc B

使用する:

function evalJson(jsArray){ eval("function x(){ return "+ jsArray +"; }"); return x(); }

var yourJson =evalJson('{"Topics":["toto","tata","titi"]}');

console.log(yourJson.Topics[1]); // print 'tata''
4
Pica Mio

jQueryを使用している場合は、関数$.parseJSON()を使用してください。私のために働いていましたが、同じ問題がありました。

0
Mark E