補足内容:
FlashVarsを使用してHTMLからjson文字列を渡す場合、文字列内の最初のダブルクォーテーション以降(ダブルクォーテーションも含む)の内容は送信されません。また、Adobe公式の場合はダブルクォーテーションが必須となります。 json.as クラス パッケージの josn オブジェクトを解析するため、長い間取り組んだ後、文字列置換関数を使用しました。
メソッドについては別の記事を参照してください:
HTML は二重引用符でパラメータを渡します。解決策
------------------------------------------- - ---------------------------------------
見てください以下の内容を再印刷してください。前の内容は、お客様のニーズに基づいた補足的な内容です:
----------------------------- --- --------------------------------------------------- --- ----
昨日、JSON の AS3 解析クラスを投稿しました。皆さんのコメントから判断すると、このことについてまだ知らない人が多いため、リテラシーに関する投稿を作成しました。
実際、AS の XML 解析はすでに非常に優れているため、AS で json を使用することは必須でも良い選択でもありません。しかし、なぜ json の使用を検討する必要があるのでしょうか。次の点があります。
json は次のとおりです。単純なテキスト メソッド (例: firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com) および XML (BrettMcLaughlin brett@ newInstance.com) は、データ量が少なく、データ形式が明確であるという、テキストと XML の中間的な利点を備えた形式です。
json は JavaScript Object Notation の略で、JavaScript から来たものであることを意味します。現在、ajax の人気により、ほとんどの Web サイトが ajax モードと構造を採用するため、データ送信には json が第一の選択肢になります (テキスト メソッドは単純すぎて、データ量が多いと理解できません。xmlメソッドには大量のデータがあり、解析する必要があるため、サーバーの負荷が増加します)、Web サイトが ajax アーキテクチャに基づいてインターフェイスのフレックス/フラッシュ バージョンを開発している場合、json を使用するとサーバー側のプログラムが最小限に抑えられます。変化します。
サーバー側には成熟した JSON 解析コードが組み込まれているため (JSON は非常に広く使用されているため)、開発中にサーバー側の解析について心配する必要はありません。
ps: なぜ上記の 3 点しか思いつかないのですか? 理由が少なすぎますか?
JSON とは何ですか?
簡単な JSON の例
最も単純な形式では、次の JSON を使用して名前と値のペアを表すことができます:
{ "firstName": "Brett" }
コードをコピー この例は非常に基本的なものです実際には、同等のプレーン テキストの名前と値のペアよりも多くのスペースを占有します:
firstName=Brett
コードをコピー ただし、複数の名前と値のペアを文字列化すると、JSON が真価を発揮します。まず、次のような複数の名前と値のペアを含むレコードを作成できます:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }
コードをコピーします構文の観点から見ると、これは名前と値のペアに比べて大きな利点ではありませんが、この場合は JSON の方が使いやすく、読みやすいです。たとえば、上記の 3 つの値が同じレコードの一部であることが明らかになり、中括弧によって値が何らかの関連性を示します。
値の配列
一連の値を表す必要がある場合、JSON を使用すると読みやすさが向上するだけでなく、複雑さも軽減されます。たとえば、人の名前のリストを表現したいとします。 XML では、多くの開始タグと終了タグが必要です。一般的な名前と値のペア (このシリーズの以前の記事で説明したものなど) を使用する場合は、独自のデータ形式を作成するか、キー名を person1 の形式に変更する必要があります。 -ファーストネーム。
JSON を使用する場合は、中括弧で複数のレコードをグループ化するだけです:
{ "people": [
{ "firstName": "Brett", "lastName": "McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold ", "メール": "elharo@macfaq.com" }
]}
コードをコピーします。これは理解するのが難しくありません。この例では、people という変数が 1 つだけあり、その値は 3 つのエントリの配列であり、各エントリは名、姓、電子メール アドレスを含む個人のレコードです。上の例は、括弧を使用してレコードを単一の値に結合する方法を示しています。もちろん、同じ構文を使用して複数の値 (それぞれに複数のレコードが含まれる) を表すこともできます。 { "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ " firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold ", "email ": "elharo@macfaq.com" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre" : "サイエンス フィクション " },
{ "firstName": "Tad", "lastName": "Williams", "genre": "ファンタジー" },
{ "firstName": "Frank", "lastName ": "ペレッティ ", "ジャンル": "キリスト教小説" }
],
"ミュージシャン": [
{ "firstName": "Eric", "lastName": "Clapton", "楽器": "ギター " },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
}
コードをコピー ここで最も注目すべき点は、複数の値を表す機能であり、それぞれの値には複数の値が含まれます。ただし、レコード内の実際の名前と値のペアは、メイン エントリ (プログラマ、作成者、ミュージシャン) ごとに異なる場合があることにも注意してください。 JSON は完全に動的であるため、JSON 構造の途中でデータの表現方法を変更できます。
JSON 形式のデータを処理するときに従う必要がある事前定義された制約はありません。したがって、同じデータ構造内でデータの表現方法を変更することができ、同じものを異なる方法で表現することもできます。
追記: 上記の例はすべて http://www.ibm.com/developerworks/cn/web/wa-ajaxintro10/ からのものです。私は Ajax をマスターしているので、他の人が Ajax を使用している場合にのみ使用します。
ダンダン、先週は仕事が忙しくて、わざわざ使い方をメモすることができませんでした。 ここでは Adobe の json クラスの使い方を紹介します。
前回公開した json クラス (http://bbs.actionscript3.cn/thread-1625-1-1.html) には問題があります。これは、それが半完成品。皆さんも怒らないと思いますが、管理人さんは削除することをお勧めします。
今回はAdobeの公式クラスなのでパッケージを修正して使えるようにしました。
以下は比較的単純なチュートリアルです:
1. サーバーからの JSON
サーバーから JSON を取得する方法 (つまり、通信) については詳しく説明しません。取得するものは文字列である必要があります。保存します。 変数serverJSONを入力し、次のように使用します。
import json.*;
var json:Object = new Object();
json = JSON.decode(serverJSON);
json は単純なオブジェクトです。
例を示します:
上記の JSON からのコードの一部:
{ "プログラマー": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName" ": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName": "Harold", "email" : "elharo@macfaq.com" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "ジャンル": "サイエンス フィクション" },
{ "名": "タッド", "姓": "ウィリアムズ", "ジャンル": "ファンタジー" },
{ "名": "フランク", "lastName": "ペレッティ" , "genre": "キリスト教小説" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
}
変数:serverJSON に保存
コード:
コードをコピー コードは次のとおりです:
var serverJSON:String = '{ "プログラマー": [{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },{ " firstName": "ジェイソン", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": " elharo@macfaq.com" }],"authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "SF" },{ "firstName": "Tad", "lastName": "ウィリアムズ", "genre": "ファンタジー" },{ "firstName": "フランク", "lastName": "ペレッティ", "genre": "キリスト教小説" }],"musicians": [ { "firstName": "エリック", "lastName": "クラプトン", "instrument": "ギター" },{ "firstName": "セルゲイ", "lastName": "ラフマニノフ", "instrument": "ピアノ" }]}'
var s:Object = JSON.decode(serverJSON);
//
trace(s.programmers[0].firstName) の使用を開始します;//出力: Brett
それほど単純ではありません。実際、変換後はオブジェクトになり、これらの値にはドット構文を通じてアクセスできます。 XMLはさておき。
2. ローカル オブジェクトは JSON に作成されます
JSON 文字列を自分で記述することもできますが、私たちはオブジェクト指向の世界にいるため、必要なときはすべてオブジェクトになります。オブジェクトは直接使用できます。
例を示します:
import json .*;
var myObject:Object = new Object();
myObject.cd = Math.random(); encode( myObject )); //出力: {"ab":"adfsdf","cd":0.0599129400216043}
このようにしてサーバーに渡すことができます。
まとめ: JSON.decode(String) と JSON.encode(Object) の 2 つのメソッドしかありません。これを使用すると、送信量が少なく、データ形式も簡単になります。
実際、XML には当然ながら独自の強みがあり、複雑なデータ構造が出現すると、現時点では JSON を扱うのが難しくなり、XML が第一の選択肢となります。