JSON-lib 2.4のバグを見つけた気がする
JavaでJSONを扱うときにJSON-libを使ってるんですが、JSON文字列からJSONObjectにパースするところでバグっぽいのに遭遇しました。
以下のJSON文字列をパースしようとするとClassCastExceptionが出ます。
{"hoge":{"{}":"fuga"}}
確認したのは以下のコード。
public class Main { public static void main(String[] args) { /** * OKパターン */ String ok = "{\"{}\":\"fuga\"}"; JSONObject okObject = JSONObject.fromObject(ok); /** * NGパターン */ String ng = "{\"hoge\":{\"{}\":\"fuga\"}}"; try { JSONObject.fromObject(ng); } catch (ClassCastException e) { e.printStackTrace(); // 出る } /** * NGパターン2 */ JSONObject ng2 = new JSONObject(); try { ng2.put("hoge", okObject); } catch (ClassCastException e) { e.printStackTrace(); // 出る } } }
ネストしたオブジェクトのキーが、JSONのオブジェクトとして解釈できる文字列だとダメっぽいです。他にも以下の文字列がダメでした。
{"hoge":{"[]":"fuga"}} {"hoge":{"null":"fuga"}} {"hoge":{"function(){}":"fuga"}}
修正しようにもソースが見つからないし、どうもプロジェクト自体メンテされてない感じがしたので、回避するには他のライブラリに乗り換えるしかなさそうです。
Javaで使えるJSONのライブラリでおすすめがあったら教えて下さい。もしくはJsonConfigをうまいこと設定すれば回避できるなら、そっちの方法も知りたいです。