まず次の例を見てください
]
JavaScriptは主要なプログラミング言語です。目的は、Netscape Navigator にページ スクリプト言語を提供することです。 Java は依然として Java のサブセットであると一般に考えられていますが、そうではありません。 C 言語に似た構文を持つ Scheme に似た言語であり、オブジェクト指向プログラミングをサポートします。 JavaScript は、ECMAScript 言語仕様の第 3 版を使用して標準化されています。
JSON は JavaScript のオブジェクト指向構文のサブセットです。 JSON は JavaScript のサブセットであるため、この言語で明らかに使用できます。
コードは次のとおりです。
var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method" : "deleteURI ", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};
上の例は、単一のメンバー「bindings」を含むオブジェクトを作成します。このオブジェクトには、3 つのオブジェクト (「ircEvent」、「method」、および「regex」) を含むオブジェクトが含まれます。 ) array
メンバーは、 . または添字演算子を使用して取得できます。
コードは次のとおりです:
myJSONObject.bindings[0].method / / "newURI "
JSON テキストをオブジェクトに変換するには、eval() 関数を使用できます。 eval() 関数は JavaScript エディターを呼び出します。 JSON は JavaScript のサブセットであるため、コンパイラーはテキストを正しく解析し、オブジェクト構造を生成します。 JavaScript 構文の曖昧さを避けるために、テキストはかっこで囲む必要があります。
コードは次のとおりです。
var myObject = eval('(' myJSONtext ')' );
eval 関数は非常に高速です。あらゆる JavaScript プログラムをコンパイルして実行できるため、セキュリティ上の問題が発生します。 eval 関数は、信頼できる完全なソース コードを使用する場合にのみ使用してください。これにより、JSON パーサーをより安全に使用できるようになります。 XMLHttpRequest を使用する Web アプリケーションの場合、ページ間の通信は同じソースからのみ許可されるため、信頼できます。しかし、それは完璧ではありません。サーバーに厳密な JSON エンコーディングがない場合、または厳密な入力検証がない場合、危険なスクリプトを含む無効な JSON テキストが送信される可能性があります。 eval 関数は悪意のあるスクリプトを実行します。
JSON パーサーを使用すると、このようなインシデントを防ぐことができます。 JSON パーサーは JSON テキストのみを認識し、すべてのスクリプトを拒否します。ネイティブ JSON サポートを提供するブラウザーは、eval 関数よりもはるかに高速な JSON パーサーを備えています。将来の ECMAScript 標準ではネイティブ JSON がサポートされることが予想されます。
コードは次のとおりです。
var myObject = JSON.parse(myJSONtext, reviver);
オプションのパラメーターとしての reviver 関数は、最終結果のキーと値の各レベルに対して呼び出されます。 各値は置換関数の値に置き換えられます。これを使用して、通常のクラスを疑似クラスのインスタンスに変更したり、日付文字列を日付オブジェクトに変換したりできます。
コードは次のとおりです。
myData = JSON.parse(text, function) (キー, 値) {
var type;
if (value && typeof value === 'object') {
type = value.type;
if (typeof type === 'string) ' && typeof window[type] === 'function') {
return new (window[type])(value)
}
}
戻り値
});
JSON 文字列化子は逆の操作を実行し、JavaScript データ構造を JSON テキストに変換できます。 JSON は循環データ構造をサポートしていないため、JSON 文字列化子に循環構造を提供しないように注意する必要があります。
コードは次のとおりです。
var myJSONText = JSON.stringify(myObject,置換);
<script>
var json_jb51 = {"showinfo": [
{"title": "脚本之家", "url": "www.jb51.net", "author": "dxy"},
{"title": "服务器", "url": "s.jb51.net", "author": "dxy"},
{"title": "软件下载", "url": "www.jb51.net/softs", "author": "dxy"}
]
};
alert("我们网站的名称:"+json_jb51.showinfo[0].title);
alert("我们网站的网址:"+json_jb51.showinfo[0].url);
</script>
stringify 関数は、toJSON メソッドを持つオブジェクトを見つけた場合、このメソッドを実行し、結果の値を返します。このようなオブジェクトは、独自の JSON 表現を決定できます。
stringifier メソッドは、オプションの文字列配列を運ぶことができます。これらの文字列は、JSON テキストに含める属性を選択するために使用されます。
stringifier メソッドは、オプションの replacer 関数を実行できます。これは、構造内の各値の toJSON メソッド (存在する場合) の後に実行されます。各キーと値をパラメーターとして渡します。もちろん、オブジェクトにはキーが含まれます。戻り値は文字列化されます。
配列または置換関数が提供されない場合、統合プロパティを無視するためのオプションの置換関数が提供されます。すべての継承されたプロパティが必要な場合は、単純な置換関数を提供できます:
var myJSONText = JSON.stringify(myObject, function (key, value) {
戻り値;
});
で表現されていない値の場合JSON(関数や未定義など)は除きます。
未確定の数量は null に置き換えられます。他の値を置き換えるには、次のように replacer 関数を使用できます。
関数 replacer(key, value) {
if (typeof value === 'number' && !isFinite(value)) {
return String (value); >戻り値;
}
オープンソースの JSON パーサーと JSON 文字列化子は
を使用できます。
縮小により 2.5K 未満になる可能性があります。