ホームページ >ウェブフロントエンド >jsチュートリアル >JS_javascript スキルの JSON 文字列を解析する Eval に関する小さな問題
私は以前、JSON の解析について説明した JSON についての紹介記事を書きました。高度なブラウザでは JSON.parse() API を使用して JSON 文字列を JSON データに解析できることは誰もが知っていますが、少し適切ではないアプローチとして eval() 関数を使用することもできます。
JSON (JavaScript Object Notation) は、xml よりも軽量なシンプルなデータ形式です。 JSON はネイティブ JavaScript 形式です。つまり、JavaScript での JSON データの処理には特別な API やツールキットは必要ありません。
JSON のルールは単純です。オブジェクトは、「名前/値」ペアの順序付けされていないコレクションです。オブジェクトは「{」(左括弧)で始まり「}」(右括弧)で終わります。各「名前」の後には「:」 (コロン) が続き、「名前と値」のペアは「,」 (カンマ) で区切られます。
var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('(' + str + ')'); console.log(obj); // Object {name: "hanzichi", age: 10}
まず、eval 関数の定義と使用法を見てみましょう。
eval()のパラメータは文字列です。文字列が式を表す場合、 eval() は式を評価します。引数が 1 つ以上の JavaScript 宣言を表す場合、 eval() はその宣言を実行します。算術式を評価するために eval() を呼び出さないでください。JavaScript は算術式を自動的に評価します。
簡単に言うと、eval 関数のパラメータは文字列であり、その文字列が "noString" の場合、結果は実行できる通常の JavaScript ステートメントになります。
なんと言いますか?たとえば、次のコード:
var str = "alert('hello world')"; eval(str);
となります。
alert('hello world')
元の質問に戻りますが、なぜ JSON 文字列を括弧で囲む必要があるのでしょうか?追加しない場合は次のようになります:
var str = '{"name": "hanzichi", "age": 10}'; var obj = eval(str); // Uncaught SyntaxError: Unexpected token :
{"name": "hanzichi", "age": 10}; // Uncaught SyntaxError: Unexpected token :
var str = '{name: "hanzichi"}'; var obj = eval(str); console.log(obj); // hanzichi
var str = '{"name": "hanzichi"}'; var obj = eval(str); // Uncaught SyntaxError: Unexpected token : console.log(obj);
{name: "hanzichi"}
オブジェクトに {name: "hanzichi", age: 10} などの 2 つのキーがあると、ラベル ステートメントは 2 つありますか? 「半日」と「10」をそれぞれステートメントとして扱いますが、ステートメントはシール番号でのみ接続できます。 (式の間にはカンマのみを使用できます)。したがって、次のように変更しても問題ありません:
var str = '{name: "hanzichi"; age: 10}'; var obj = eval(str); console.log(obj); // 10
この記事では式については説明しません。式については、記事の最後にあるリンクを参照してください。式には常に戻り値があることを覚えておく価値があります。ほとんどの式は () で囲まれ、括弧を空にすることはできません。カンマで区切られた複数の式 (いわゆるカンマ式) がある場合は、最後の式の値が返されます。
上記は、JS での JSON 文字列の Eval 解析についてエディターが紹介した小さな問題です。皆さんのお役に立てれば幸いです。