« リファクタリング |Main| 日記 »

« リファクタリング | log | リリース作業 »

JSONそんなに甘くない

世の中そんなに甘くない。JSON形式で保存したグラフをJSON形式で読み込んでJSONObjectになったものをそのままXML-RPCのインターフェイスに投げつければグラフが復元できるかと思いきや、JSONObjectとHashtableに互換性がないせいで、あちらこちらで型キャストに失敗する。JSONObjectとJSONArrayを全部再帰的にHashtableとVectorに変換してから投げないといけない。

あと、EdgeオブジェクトはVertexオブジェクトへの参照を持っていて、今まではそれで何の支障も感じなかったのだけど、XML-RPCやJSONのことを考えると、参照をそのままシリアライズできないため、何らかの方法でEdgeがどのVertexを持っているのかをシリアライズ可能な形式で取得できるようにする必要がある。むにゃむにゃ。

今日はあまり眠れていないのでもう活動限界。明日のリリースに関してはJSONでの保存は諦めてとりあえずXML-RPCを試してもらえるようにし、それがあっさり終わったらその次のリリースに向けて改めてJSONでの保存を考えることにしよう。


結局、org.json.simpleの方はHashMapやArrayListを継承してJSONObjectとJSONArrayを作っていたので、これをHashtableとVectorに変更して、あとXML-RPCからやってくる整数はIntegerなのにJSONからやってくる整数はLongだったのでリフレクションで適当にキャストして値を取り出すユーティリティ関数を一つ作って、一応JSONの読み書きができるようになりました。

あ、誤解を招く表現。頂点への参照をどうやってシリアライズするかが解決されていないので読み込めるのは頂点だけ。まぁ、単に頂点クラスにidを振るだけでは、途中に削除された頂点がある場合に指定したIDで取得できる頂点がずれてしまうので、まともに解決しようと思えば今VectorであるvertexListがHashtableになるより他にない気がします。削除のたびに頂点IDを振り直すとかどう考えても危険だし。

頂点リストのハッシュ化に取りかかりたい気分だけど、明日きちんと当分リリースし直さなくていいような安定版をリリースすることを考えよう。

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/102

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.