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


人の良いジョンカビラと言われます。
AMN sponsor rolls
冷や汁大好きです
(sponsor Ad)
PR:JUGEMキャラコン
モバツイッター
ヘルメットアタカ
F's Garage関連
このカテゴリ[Web系]の最新30件
iPhoneのイノベーション、プラットフォームにうまく載れる人たち DBに保存されたクレジットカード情報が流出するリスクに対して、1人日で対処できる暫定対策 ActiveServerPages時代にはhashもSQLインジェクションもすげーメジャーというわけではなかった。 Googleストリートビューへの拒否感と、Youtubeに対するコンテンツホルダーの嫌悪感って似てない? プラモ狂四郎なミニ四駆の世界 画像ダウンロードブックマークレット オススメのURLを一発でツイッターに送信できるブックマークレット WebSigのCMSイベントとかペパボ合宿とか告知系日記 モバツイッターで、カーボンオフセット始めました。 ライブコミュニケーションの急激な進化 全国規模で見たスモールビジネスとしてのWeb屋のありかた 「こっそり」が広く流通するソーシャルメディアとヨドバシのハナシ 紙とデバイスと私 FlashのSEO対策 2008/07版 HI.SCORE Kitchen飲み行ってきました! 20日にHi Score Kitchenで飲み会やりますのお誘い Webが若干衰退気味かもしれない時にもっておくべき考え〜CSS nite Shuffle行った GWTは思ったより凄かった〜Google Developer Day行った モバイルe-learningの可能性 モバツイッターが新規ログインができなかった件のお詫び WebSig24/7会議 「ビジネスに繋げるアクセス解析マインド」 apache+phpでセグメンテーションフォルトが起きて困ってる件 セミナーを共有するセミッターを作った ヤスヒサさんとのWebデザイナーについてのpodcast 日本の技術は優れてるが、世界からスルーされてるのが問題 e-learning2.0への期待 メタバースの行くべき道は。 2000年頃のAmazonとニコ動の共通イメージ メッセを通じて送られる謎のURLとID,passの管理 検索「ツイッター」、でモバツイッターが一切出てこない
[このカテゴリをもっと見る]
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件
AmazonのkindleとiTunes Store iPhoneのイノベーション、プラットフォームにうまく載れる人たち 何故、Linuxはデスクトップで普及していないのか?を読んで。