Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

便利機能を知らないで自力で実装して後悔する事がよくあります。JSON編

Javascriptの世界ではXMLの冗長性を考慮したJSON形式があります。
AJAXのソースがスパゲッティに成り勝ちだったので修行しなおしてます(かつのりさんありがとうごさいました。)
流れとして XMLでのやりとりに加えて、JSONを使うことが多いと思います。
JSONの扱いで、構文解析の部分は  Yahoo UI Libraryなり prototype.js なりが処理しているものだと勝手に決め付けて、非AJAXの画面ではJSONデータのParseを自力でコーディングしてました。
ところがよくソースを見ていくと、JSONを評価しているのは純JavaSriptの eval()はないですか。
ということは、非AJAXアプリでも使えるってこと?
早速実験
 var js  = "{'item':[{'itemA':'a1', 'itemB':999 , 'itemC':'c1'},\n"
 js += "         {'itemA':'a2', 'itemB':998 , 'itemC':'c2'},\n"
 js += "         {'itemA':'a3', 'itemB':997 , 'itemC':'c3'},\n"
 js += "]}\n";
 try
 {
  var data = eval("(" + js + ")")
  }
  catch(e)
  {
   alert("Error" + e);
  }
 for (var i=0; i< data.item.length; i++)
 {
   var iA= data.item[i].itemA;
   var iB= data.item[i].itemB;
   var iC= data.item[i].itemC;
   alert ( "[itemA :" + iA + ": itemB : " + iB + " : itemC : " + iC + "]") ;
 }

使えるジャン!  ....JSONパースを作った私はなにをしてたんだ........スクリプトエンジンは賢い。(私がバカなのか)

「無いものは作れ」は原則なんですが、本当に無いものかどうかは作る前に再度調査が必要ですね。特に思い込みで「無いもの」してしまいがちなのて注意が要りますね。
それにしても、JSONでの記述は面白い。Webアプリがどんどん面白くなってきます。

投稿日時 : 2007年9月17日 23:54

Feedback

# re: 便利機能を知らないで自力で実装して後悔する事がよくあります。JSON編 2007/09/18 1:16 かつのり

実はevalは危険なので、入力元が信頼できないとやばいです。
例えばHTTP経由でGMailのJSONデータをそのままevalすると、
JSONの頭にwhile(1);と書かれているので無限ループ突入ですw。

自前でツールを作って評価する文には取り除けるのですが、
恐らく一般的なツールを弾くためにあるんでしょうね・・・

前にJSONパーサを書いたと自分のエントリで書きましたが、
ユーザ入力のJSONをサーバ側でevalで評価する前の処理で、
入力が安全か検証するためだったんですね。
JSONパースは決して無駄じゃないですよ。

# re: 便利機能を知らないで自力で実装して後悔する事がよくあります。JSON編 2007/09/18 16:45 Ognac

>JSONの頭にwhile(1);と書かれているので無限ループ突入ですw。
そういう落とし穴があるんですね。たまたま遭遇していないだけだったんですね。
無駄にならなくてよかったような、納得できないような.....ま、いいか。 <== コラ

タイトル
名前
Url
コメント