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


モバツイの中の人
マインドスコープ(株)社長
人の良いジョンカビラと言われます。
AMN sponsor rolls
モバツイの2つのスマートフォン
アンドロイドアプリ!
アンドロイドアプリ モバツイtouch
全てのスマートフォンブラウザと、Nintendo3DSで! HTML5版Webアプリ「モバツイsmart」
本を書きました!
100万人から教わったウェブサービスの極意 ~「モバツイ」開発1268日の知恵と視点
Google Friend Connect
このカテゴリ[Web系]の最新30件
インターネットの可能性を信じて〜本を書きました。 ネットショップに20万円は高いという感覚は割と普通の感覚だと思う。 ソーシャルメディアの生かし方 インターネットは芸術だ ECサイトはGoolge検索エンジンのプラットフォームに乗ってることを自覚せよ Ubuntu 8.0.4でTwitter apiのSSL通信ができなくなった人向けのメモ インターネットを支える仮想共同体 twitterとfacebookのレイヤーは違う 文脈が共有できていないフロー型コミュニケーションの問題点 身も蓋もなくなるインターネット フェイスブックページっで起きるかなぁ?!って思ってること。 非公式RTじゃないとできないこと。公式RTが目指したもの。 ツイッターのつぶやき価値 ネットコミュニケーションは万人の手段ではない AWS東京リージョンとtwitter apiの関係 Facebookがインターネットになると困る デジタルネイティブではない30代のつぶやき ネチケットとアーキテクチャという法律のあいだに。 相撲の八百長問題に見られる、ITによるフローのストックという構図 Webエンジニアスキルの勘所 ツイッター面白いね WebSig一日学校で考えてたこと ソーシャルメディアについてのメモ User Streamの先にあるtwitter Web Creation Awardsにノミネートされました。 携帯Webのクッキー利用について調べてみたメモ【update】 twitterドラマと今後のツイッター デジハリの杉山学長賞をいただきました。 日経電子版を流行らせる一つの思いつき 商品の良さとリンクは、140文字で伝えなさい
[このカテゴリをもっと見る]
Powered by
Movable Type

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件
インターネットの可能性を信じて〜本を書きました。 バルスのツイート機能に関する謝罪を書いたら沢山反応があった件 モバツイの広告の取り組みについて、発表資料の共有