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