今回は、JSON.parse()、JSON.stringify()、eval()の使い方と、JSON.parse()、JSON.stringify()、eval()を使用する際の注意事項について詳しく説明します。 eval() を次に示します。実際のケースを見てみましょう。
「JSON (JavaScript Object Notation) は軽量のデータ交換形式です。ECMAScript のサブセットに基づいています。言語に依存しないテキスト形式を採用しているため、C 言語ファミリーに似た習慣も使用しており、これらを持っていますJSON は、人間にとって読み書きしやすく、また、機械にとっても解析と生成が容易な理想的なデータ交換言語です (通常、ネットワークの送信速度を向上させるために使用されます)。内部の JSON.parse() 関数と JSON.stringify() 関数 ちなみに、ネイティブ JS の eval() 関数についても触れておきます
(1) JSON.parse 関数 関数: JavaScript オブジェクトを表す(JSON)
Stringオブジェクトに変換します。 構文: JSON.parse(text [, reviver])
パラメータ:
text 必須。 有効な JSON 文字列。
復活者 オプション。 結果を変換する関数。 この関数は、オブジェクトのメンバーごとに呼び出されます。
戻り値: オブジェクトまたは配列
例:
var json = '{"name":"GDT","age":,"University":"GDUT"}'; var info = JSON.parse(json); //解析为JSON对象 document.write(info.name + ' is a student of ' + info.University + ' and he is ' + info.age + " years old."); /info为Object对象
(2) JSON.stringify() 関数関数: JavaScript 値を JavaScript Object Notation (JSON) 文字列に変換します
構文: JSON.stringify ( value [, replacer] [, space])
パラメータ:
value 必須、通常は変換する必要があるJavaScriptの値(通常はオブジェクトまたは配列)
replacer オプション、結果または配列を変換するために使用される関数
スペース オプション。戻り値の JSON テキストにインデント、スペース、改行を追加して読みやすくします。
戻り値: JSONテキストを含む文字列
例:
var info = {name:"GDT",age:,University:"GDUT"}; var json = JSON.stringify(info); //转换为JSON字符串 document.write(json); //output为{"name":"GDT","age":23,"University":"GDUT"}
(3) eval()関数機能: eval()関数は、特定の文字列を計算し、JavaScriptコードを実行できます。
構文: eval(string)
パラメータ:
string 必須、計算されるJavaScript
式または実行されるステートメントを含む、計算される文字列。 戻り値: 計算された文字列の値があれば返します (存在しない場合は変更せずに返します)
例:
eval("x=;y=;document.write(x*y)"); //output为 document.write(eval("+")); //output为 var x=; document.write(eval(x+)); //output为
eval() 関数を使用すると、JSON 文字列をオブジェクトに解析することもできます。関数は JSON.parse() の関数と同じですが、違いがあります。以下のコードを参照してください
// JSON.parse() var json = '{"name":"GDT","age":,"University":"GDUT"}'; var info = JSON.parse(json); //解析为JSON对象 document.write(info); //output为[object Object] //eval() var json = '{"name":"GDT","age":,"University":"GDUT"}'; var info = eval('(' + json + ')'); //解析为JSON对象 document.write(info); //output为[object Object]
eval() も文字列をラップするために一組のかっこを使用していることに気づいたかどうかはわかりません。私はこれを探しています より良い説明は次のとおりです:
理由: これは eval 自体の問題になります。JS では、json は "{}" で始まり、ステートメント ブロックとして処理されるため、そうする必要があります。式に変換することが必須です。
解決策: かっこを追加する目的は、JavaScript コードを処理するときに、ステートメントとして実行するのではなく、かっこ内の式を eval 関数に強制的にオブジェクトに変換させることです。たとえば、オブジェクト リテラル {} を考えます。外側の大括弧が追加されていない場合、eval はその中括弧を JavaScript コード ブロックの開始マークと終了マークとして認識し、{} は空のステートメントを実行するとみなします。次の例で違いを確認してください
alert(eval("{}")); // return undefined alert(eval('('+'{}'+')')); // return object[Object]
さらに、厳密な記述形式の JSON.parse() と比較して、eval() は比較的緩やかで潜在的に安全な文字列を解析できます。たとえば、次のコード:
var str = '{"a":"b"}'; document.write(eval("("+str+")")); //正常解析为对象 var str = '{"a": (function(){alert("I can do something bad!");})()}'; eval('('+str+')'); //可以用来执行木马脚本
悪意のあるユーザーがページにトロイの木馬のリンクを挿入するスクリプトを json 文字列に挿入した場合、eval を使用して操作することもできますが、この問題を心配する必要はありません。 JSON.parse() を見ると、 eval() 関数は非常に強力ですが、実際に使用する機会はそれほど多くないことがわかります。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
jQueryはサムネイルをクリックして再生効果を切り替えます
以上がJSON.parse()、JSON.stringify()、eval()の使い方の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。