愛車:マツダアテンザ
Webを中心とした、ビジネス&テクノロジーに関する思いつき
by F-shin
[ このサイトについて ] [ F-shinについて ] [ トップ ]
author:えふしん
photo_20.jpg
藤川真一について


モバツイの中の人
(株)想創社(そうそうしゃ)社長
人の良いジョンカビラと言われます。
AMN sponsor rolls
ツイッターやるなら
for iPhone App
Google Friend Connect
このカテゴリ[Web系]の最新30件
Web Creation Awardsにノミネートされました。 携帯Webのクッキー利用について調べてみたメモ【update】 twitterドラマと今後のツイッター デジハリの杉山学長賞をいただきました。 日経電子版を流行らせる一つの思いつき 商品の良さとリンクは、140文字で伝えなさい ツイートの流速とremoveの関係性 セミッターをアップデートしてテストしてみた報告 UStreamを見ながら書いたつぶやきの翌日の反応のがっかり感について。 ネット配信 vs 紙 vs 放送 Twitterに流れるツイートの半分は英語以外で、日本語がトップ デジハリ同窓会が、とても印象的だった件 twitterは、負からの復活の活動に向いているメディアである。 twitterおすすめユーザー、フォロワー20万人の力。 ワーナー作品のオンデマンド配信サービス「ワーナーオンデマンド」 動画ベーススライドプレゼンよりも、スライドベース動画プレゼンの方がWeb向き。 mixiアプリやるならAmazon EC2 モバツイが月間1億PV到達の見通し ツイッターとはなんぞや?のわかりやすい回答 ツイッターか?ブログか?思考の整理学 【Best Mobile Based Twitter App】モバツイッターがTOP5にノミネートされました。投票のご協力を!【敵はtweetie2】 【Best Mobile Based Twitter App】モバツイッターのOpen Web Awardsへの投票のご協力をお願いします! モバツイッターが日経ビジネスアソシエに掲載されました。 ネットビジネスで商標は大事です。 twitterによって世界が集約され心の戦争が起きる おまとめマンxTwitterキャンペーン セカイカメラは、21世紀のネットスケープになるか?! 「食事中なう」が無意味だと?あれ?ライフログってなんだか意味わかってる? 岡田有花さんに取材された! EC2のロードバランサーのIPアドレスが変わる罠
[このカテゴリをもっと見る]
F's Garage関連
Powered by
Movable Type
■お知らせ
第8回 Web Creation Awardsにノミネートされました。7/9までの一般投票に是非ご協力ください!
投票はこちら

July 31, 2007

Flashにjsonのデータを読ませたくて、json.asを使ってネットの情報を参考にして読んでみたが、Bad Stringであったり、謎のBad objectとかいうエラーが出てパース失敗しませんか?

あちこち見て、僕が調べた範囲でのやりかた、

1.json.asをincludeする。
2.PHPとかから、「json_var = {JSONのデータ文字列}」の形でアウトプットする。
3.LoadVarsオブジェクトのonLoadイベントで、this.json_varで取れた文字をjson.asでパースする


終わり
 ・
 ・
 ・
コレ文字列によっては失敗しません?


僕もFlash久々だったので、そのまま鵜呑みにしてハマりました。

調べるとネット上では、サーバサイドで文字列を事前に"とか&を数値参照に変換しないとダメよ、なども出てくるので変換した。


「あれーJSONって、文字をUTF-8にさえしておけば、そういうのを勝手にやってくれるから、そのままGETで送受信できるんじゃないのー?」

という疑問符を持ちながらも、ありがたく参考にさせてもらったが、やっぱり何かの文字でエラーが出てパースできない。

頑張ってデータを調べたら、この方法ではうまくいかないのは、文字列中にダブルクオート「”」が入った場合。

面倒だから、とサーバ側でダブルクオートをシングルクオートとかに変換しちゃえば動く。

でも、それ気持ち悪い。


ここでふと思いついた。ダブルクオートは、文字列の区切りとしてJSONでは重要な文字列。

LoadVarsというのは非常にリッチなクラス(正確にはLoadVariablesメソッド)で、URLのクエリストリングやPOSTヘッダに書かれた「a=b&c=d」を自動的にパースして、URLエンコードされた文字も自動的に元の文字列に戻してくれて、オブジェクトのプロパティに自動で設定してくれる便利なメソッド。

ということで、json.asでパースすべきJSONのデータもイイ感じにdecodeしてくれちゃってるからワケのわからないことになってるのでは?!という仮説を立てた。


ということで、

こたえ:
「LoadVarsオブジェクトのonDataイベントの引数を使ってパースすべし」

onDataイベントの引数には、LoadVarsがパースする前の生文字列を取得できるので、これをそのままjson.asに放り込みましょう。

以上。

そうすれば、きっとFlash専用の文字加工など不要になりますし、サーバ側で「json_var = {JSONのデータ文字列}」というFlashだけの特殊な出力をする必要が無くなります。


PHPなどのサーバサイドで事前に文字列を数値参照に変換しているのは二重encodeして結果的にonLoadの自動デコードでJSONとしての不適切な文字列に戻すのを避けるようにしてるためのもの??それだと無理矢理なおまじないではないかと。

しかし、文字列の区切りに使っているダブルクオートだけはそうはうまくいかないから、Bad objectというプリミティブなエラーが出るんだろうな。あまり深追いはしてないけど、僕のゴーストがそうささやいた。


JSONのパースをネタにblogを書いてる人は、パースに成功してみるところまではやってみたけど、それ以上は使っていないということなのだろうか、、、、それとも、ハマりにハマって直した情報をフィードバックしてくれていないだけなのだろうか。

onDataで取るの当たり前じゃんとかいう人がいたら、一言blogに書いてもらえるとありがたかった(ワガママ)

僕もまだ修行が足りないってことだが、json慣れしてるのにFlash慣れしてない開発者はきっと同じように困るだろうから、これが「JSON Bad Object」でgoogle上位に出るようにメモメモ


#とか偉そうなこと言って、全然的外れだったら是非、コメントで教えてください。

■同じカテゴリ[Web系]のエントリー
<<前の記事 WebSig MT4イベント
>>次の記事 css nite okinawa来ています
■このblogの書き込み最新3件
Web Creation Awardsにノミネートされました。 モバツイランドとモバツイストア もう一つのソフトバンク新製品発表会