JSONObject のput メソッドを使うとWarning がもりもり出るので僕、不満足!!
json-simple のJSONObject でサポートされているput() メソッドを使うと、
Warning がもりもり出て、画面が黄色くなってしまうので大変アレです。
↓こんな感じで書くと、obj.putが警告を出してくるので精神が不安定になります。
import org.json.simple.JSONObject; public class JSONObjectSample { public final void jsonSample() { JSONObject obj = new JSONObject(); obj.put("first_name", "James"); obj.put("second_name", "Brown"); } }
警告メッセージ *1 を読むとわかるように、 「型安全が守られてないから何とかしろ」ってことですね。
警告では、JSONObject ではなく型を指定出来るHashMap を使うように薦めてきますが、
男にはJSONObject を使わねばならぬ時があるので *2、なんとかしたいです。
手っ取り早い方法
手っ取り早く警告を消すには、@SuppressWarnings("unchecked") と書いてやれば良いです。↓こんな感じ
import org.json.simple.JSONObject; @SuppressWarnings("unchecked") public class JSONObjectSample { public final void jsonSample() { JSONObject obj = new JSONObject(); obj.put("first_name", "James"); obj.put("second_name", "Brown"); } }
いやいや、それってどうなのよ
警告は抑制されますが、本質的な問題、つまり「型安全ではない」という問題は解決されていません。ので、ちょっと考えて以下のように書き換えてみました。
import java.util.HashMap; import org.json.simple.JSONObject; HashMap<String, String> hash = new HashMap<String, String>(); hash.put("first_name", "James"); hash.put("second_name", "Brown"); JSONObject obj = new JSONObject(); for (String key : hash.keySet()) { obj.put(key, hash.get(key)); }
こうすると、HashMap の構造をそのままJSONObject に移植しているので型安全であると言えるのでは無いでしょうか。
ただ、この方法でもobj.pu() の部分で警告が出るので@SuppressWarnings("unchecked")等で対応する必要があるので、
「本当に解決してんのか?」と訊かれるとちょっとあやしい感じです。
(追記)
あと、もちろんパフォーマンスが悪くなるのでこれもどうかと思う所です。
(追記ここまで)
結論
@SuppressWarnings("unchecked") からは逃げられない。というか、JSONObject は型とかそういうのを関係なく、ガンガンものを突っ込めるのが利点だと思うんですが、
そこら辺はどうなんでしょうね。確かに、put 時の型のvalidation は必要 (な場合がある) かも知れませんが。