ホームページ >ウェブフロントエンド >jsチュートリアル >js_javascript スキルで JSON 文字列を JSON オブジェクトに変換する最良の方法

js_javascript スキルで JSON 文字列を JSON オブジェクトに変換する最良の方法

WBOY
WBOYオリジナル
2016-05-16 16:54:461639ブラウズ

JSON 文字列を JS の JSON データ形式に解析するには、通常 2 つの方法があります。
1. 1 つは eval() 関数を使用する方法です。
2. Function オブジェクトを使用してリターン分析を実行します。

最初の解析方法: eval 関数を使用して解析し、jQuery の各メソッドを使用して走査
jQuery を使用して、jQuery 非同期リクエストの送信オブジェクトとして、jQuery リクエスト後に返される JSON データを解析します。ここで考慮されるのは、サーバーによって JSON 形式で返される文字列です。JSONObject などのプラグインによってカプセル化された JSON オブジェクトの場合、プロセスは同様であるため、ここでは説明しません。
ここではまず JSON 文字列セットを示します。文字列セットは次のとおりです。

コードをコピーします コードは次のとおりです。 :
var data = " {
root:
[
{名前: '1'、値: '0'},
{名前: '6101'、値: '北京'} ,
{名前: '6102', 値: '天津'},
{名前: '6103', 値: '上海'},
{名前: '6104', 値: ' 重慶市'},
{名前: '6105', 値: '渭南市'},
{名前: '6106', 値: '延安市'},
{名前: '6107' 、値: '漢中市'},
{名前: '6108'、値: '玉林市'},
{名前: '6109'、値: '安康市'},
{name : '6110', value: 'Shangluo City'}
]
}
";

ここでは、jQuery によって非同期的に取得されたデータ型、つまり json オブジェクトとそれぞれ2つの方法で得られた結果の処理方法を紹介します。
1. サーバーから返される JSON 文字列について、jQuery 非同期リクエストが型を指定しない場合、または文字列として受け入れる場合は、メソッドをオブジェクト化する必要はありません。つまり、put です。 eval() 内の文字列は 1 回実行されます。このメソッドは、通常の JavaScript メソッドで json オブジェクトを取得するのにも適しています。次の例に示します。
コードをコピー コードは次のとおりです。
var dataObj = eval("(" data ")"); // json オブジェクトに変換します


なぜ "("(" data ") を追加する必要があるのですか)");" を評価しますか?
理由は、eval 自体の問題です。 jsonは「{}」で始まり最後が「{}」で終わるため、JSではステートメントブロックとして処理されるため、強制的に式に変換する必要があります。
かっこを追加する目的は、JavaScript コードの処理時に、かっこ内の式をステートメントとして実行するのではなく、eval 関数で強制的にオブジェクトに変換することです。たとえば、オブジェクト リテラル {} を考えます。外側の大括弧が追加されていない場合、eval はその中括弧を JavaScript コード ブロックの開始マークと終了マークとして認識し、{} は空のステートメントを実行するとみなします。したがって、次の 2 つの実行結果は異なります:
コードをコピーします コードは次のとおりです:

alert( eval("{}"); // return unknown
alert(eval("({})");// return object[Object]

この書き込みメソッドでは、JS で
例: (function(){})(); クロージャー操作などを行うとき
コードをコピーします。 <.> コードは次のとおりです: alert(dataObj.root.length);//ルートのサブオブジェクトの数を出力します
$.each(dataObj.root, fucntion(idx, item) {
if (idx == 0) {
return true;
}

//各ルートサブオブジェクトの名前と値を出力しますalert("name:" item.name ",value:" item.value);

})

2. サーバーから返される JSON 文字列の場合、jQuery 非同期リクエストがタイプ (通常はこの構成属性) を「json」に設定するか、$.getJSON() メソッドを使用してサーバーから返される値を取得する場合、 () メソッドは必要ありません。この時点で取得された結果はすでに json オブジェクトであるため、このオブジェクトを直接呼び出すだけで済みます。ここでは、データ処理方法を説明するために $.getJSON メソッドを例として使用します。 >


コードをコピー コードは次のとおりです:
$.getJSON("http://blog.snsgou.com/", {param: "snsgou"}, function (data) {
// ここで返されるデータはすでに json オブジェクトです
// 以下の他の操作は最初のケースと同じです
$.each(data.root, function (index, item) {
if (index == 0) {
return true; // countinue と同じ、false を返すのは Break
}
alert("name:" item.name ",value:" item.value);
});
});
これは特別です。メソッド 1 の eval() メソッドは文字列 (おそらく js スクリプト) を動的に実行するため、システム セキュリティの問題が簡単に発生する可能性があることに注意してください。したがって、eval() を回避するサードパーティのクライアント スクリプト ライブラリを使用できます。たとえば、JavaScript の JSON は 3K 未満のスクリプト ライブラリを提供します。

2 番目の解析メソッド: Function オブジェクトを使用して完了します。その典型的な用途は、jQuery

data =(new Function("", "return " json))();

このときのデータは解析対象のjsonオブジェクトです。



最終的な結論は次のとおりです。
json 文字列を json オブジェクトに変換するには、 eval('(' jsonString ')') の代わりに (new Function("return " jsonString))(); を使用します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。