JavaScriptのeval JSON oject問題

1451 ワード

通常のやり方はvar jsonData=eval(xmlHttp.reponseText)です.これはすべて正しいように見えますが、コードを実行すると、エラーが発生します.なぜですか?私もよく分かりませんが、この問題を解決する方法を見つけました.
この問題に遭遇したばかりの時も特に頭が痛いです.すべてのコードが正しいように見えます.テストのために問題が発生した位置は、コード範囲を縮小していきます.最終的には下記のような短いコードが得られます.
 
  
var jsonStr1 = '{"Name":"Tom","Sex":"Man"}';
var jsonObj1 = eval(jsonStr1);
alert(jsonObj1.Name);
以上のコードの実行は最初に言ったinvalid labeエラーを報告します.eval関数はいくつかの表現やオブジェクトに制限がありますか?そこで私はまた配列の対象をテストしました.コードは下記の通りです.結果として下記のコードは正常です.
 
  
var arrStr = '["Tom","Man"]';
var arrObj = eval(arrStr);
alert(arrObj[0]);
まさか私のマシンのJavaScript解析器がJSONの解析に問題を起こしました.そこで私はまた次のコードをテストしましたが、結果は同じです.
 
  
var jsonObj = {"Name":"Tom","Sex":"Man"};
alert(jsonObj.Name);
結局、自分で問題を解決していませんでした.そこで、間違った情報をもとにインターネットを利用して答えを探してみましたが、意外にも問題の根源を発見しました.解決方法は「evalの時に、まずJSON文字列の値を「()」括弧でくくります.ネットで探した資料は全部説明していませんでしたが、もちろん本当の原因は分かりませんでした.括弧は強制的に先に実行しますか?それとも先に演算します.返したJSONは完全なオブジェクトです.中間にも表現がありません.なぜ括弧を入れなければなりませんか?配列のような複雑な点の対象も正常にevalできます.仕方がないです.この使い方を覚えておきましょう.正しい使い方は以下の通りです.
 
  
var jsonStr2 = '{"Name":"Tom","Sex":"Man"}';
var jsonObj2 = eval('(' + jsonStr2 + ')');
alert(jsonObj2.Name);