MyJsonObj

Json をこういう風↓に作りたいときもありますよね。。(org.jsonみたいに)

需要は無いのでしょうか?

JavaBeanみたいのをチマチマ定義するのも面倒ですし。

キー名固定みたいのもダサいですよね。setUser(String)とか。

package hello.gson;public class HelloGson { public static void main(String[] args) { MyJsonObj obj = new MyJsonObj(); obj.put("key1-1", "value1"); obj.put("key1-2", "value2"); { MyJsonObj obj2 = new MyJsonObj(); obj2.put("key2-1", "value2"); { String[] ss = { "aa", "bb", "cc" }; obj2.put("arr2-1", ss); } obj.put("key1-3", obj2); } { String[] ss = { "aa", "bb", "cc" }; obj.put("arr1-1", ss); } // {"key1-1":"value1","key1-2":"value2","key1-3":{"key2-1":"value2","arr2-1":["aa","bb","cc"]},"arr1-1":["aa","bb","cc"]} System.err.println(obj.toJson()); }}

というわけで、Gsonにデフォルトで存在するのかもしれませんが、作ってみました。

(すでに存在していればどなたかご指摘ください。)

package hello.gson;import com.google.gson.Gson;import com.google.gson.JsonArray;import com.google.gson.JsonObject;public class MyJsonObj { JsonObject root = new JsonObject(); public JsonObject getRoot() {return root;} public void put(String k, Boolean v) {root.addProperty(k, v);} public void put(String k, Character v) {root.addProperty(k, v);} public void put(String k, Number v) {root.addProperty(k, v);} public void put(String k, String v) {root.addProperty(k, v);} public void put(String k, MyJsonObj o) {root.add(k, o.getRoot());} public void put(String k, Object[] oo) { JsonArray innerArray = new JsonArray(); for (Object o : oo) { if (o instanceof Boolean) { innerArray.add((Boolean) o); } else if (o instanceof Character) { innerArray.add((Character) o); } else if (o instanceof Number) { innerArray.add((Number) o); } else if (o instanceof String) { innerArray.add((String) o); } } root.add(k, innerArray); } public String toJson() { return new Gson().toJson(root); }}

めでたしめでたし。