もう一つの手段。
YUIのサイトをうろついてたら、JSON BETAってのをみっけ。
JavaScriptでJSONのデータを扱う場合、JSONPでコールする場合は問答無用でevalされるのでおいておくとして、それ以外の場合は明示的にevalするほかにJSON.orgのライブラリを使う方法がある。
また、JSONでデータを書き出したいときはtoString()してもinvalidなJSONしか出てこない*1ので、JSON.orgのライブラリに入ってるシリアライザを使うことになる。だけど、このライブラリはObject.prototypeを弄ってくれるので他のライブラリと衝突することがある。確かじゃないけどなんかprototype.jsとぶつかってたような気が。
そこでYUIのこれ。
Yahoo! UI Library: JSON utility
ちょっと触っただけだけど、少なくともprototype.jsとは衝突してないみたい。おそらくYUIの他のと組み合わせても問題ないはず。
使い方も簡単。
<!-- Dependencies --> <script src="http://yui.yahooapis.com/2.4.0/build/yahoo/yahoo-min.js"></script> <!-- Source file --> <script src="http://yui.yahooapis.com/2.4.0/build/json/json-beta-min.js"></script>
こうやって組み込んで、
/* これでデシリアライズ */ var someObject = YAHOO.lang.JSON.parse(jsonString); /* シリアライズはこうする */ var jsonString = YAHOO.lang.JSON.stringify(someObject);
これは便利。
*1:このメソッドだとJavaScriptとしては正しいがJSONとしては正しくない物が得られる。RubyのJSONパーサなんかに与えると落ちる。