fork download
  1. import java.util.*;
  2.  
  3. class Ideone {
  4. public static void main (String[] args) throws Exception {
  5. Json v = Json.dict()
  6. .put("name", "John Lennon")
  7. .put("email", "foobar@gmail.com")
  8. .put("phone", "+81-90-0000-0000")
  9. .put("occupation", Json.array("Programmer", "System Engineer"))
  10. .put("language", Json.array("Japanese", "English", "Spanish", "Chinease"))
  11. .put("hobby", Json.array("Photography", "Traveling", "Fishing", "Onsen"))
  12. ;
  13.  
  14. System.out.println("--property-------------------");
  15. System.out.println( "v[language][2] = " + v.get("language").get(2) );
  16.  
  17. System.out.println("--for------------------------");
  18. for(Map.Entry<Json,Json> et : v.eachDict()){
  19. System.out.println(et.getKey() + "=" + et.getValue());
  20. }
  21.  
  22. System.out.println("--toString-------------------");
  23. System.out.println(v);
  24. }
  25. }
  26.  
  27.  
  28.  
  29.  
  30. class Json {
  31. static JsonDict dict(){return new JsonDict();}
  32. static JsonArray array(Object... args){return new JsonArray(args);}
  33. static Json toJson(Object v){ return v instanceof Json ? (Json)v : new JsonValue(v); }
  34.  
  35. Iterable<Map.Entry<Json,Json>> eachDict(){throw new UnsupportedOperationException();}
  36. Iterable<Json> each(){throw new UnsupportedOperationException();}
  37. Json key(){throw new UnsupportedOperationException();}
  38. Json val(){throw new UnsupportedOperationException();}
  39. boolean containsKey(Object k){throw new UnsupportedOperationException();}
  40. Json get(Object k){throw new UnsupportedOperationException();}
  41. Json get(int index){throw new UnsupportedOperationException();}
  42. }
  43. class JsonValue extends Json {
  44. private Object v;
  45. JsonValue(Object v){this.v=v;}
  46. @Override Object raw(){return v;}
  47. @Override public String toString(){
  48. if(v == null){return "null";}
  49. if(v instanceof Number){return String.valueOf(v);}
  50. String vs = String.valueOf(v);
  51. return "\""+vs.replace("\\","\\\\").replace("\"","\\\"")+"\"";
  52. }
  53. @Override public int hashCode(){return v==null ? 0 : v.hashCode();}
  54. @Override public boolean equals(Object o){
  55. if(o == null || o.getClass() != JsonValue.class){return false;}
  56. Object v2 = ((JsonValue)o).raw();
  57. return v==null ? v==v2 : v.equals(v2);
  58. }
  59. }
  60. class JsonDict extends Json {
  61. private Map<Json,Json> m = new HashMap<Json,Json>();
  62. JsonDict put(Object k, Object v){
  63. m.put(toJson(k),toJson(v));
  64. return this;
  65. }
  66. @Override boolean containsKey(Object k){ return m.containsKey(toJson(k)); }
  67. @Override Json get(Object k){
  68. Json r = m.get(toJson(k));
  69. if(r == null){throw new IllegalArgumentException("undefined ["+k+"]");}
  70. return r;
  71. }
  72. @Override Iterable<Map.Entry<Json,Json>> eachDict(){return m.entrySet();}
  73. @Override public String toString(){
  74. StringBuilder sb = new StringBuilder();
  75. sb.append("{");
  76. int i=0;
  77. for(Map.Entry<Json,Json> et : m.entrySet()){
  78. sb.append(i++ != 0 ? ", " : "").append(et.getKey()+":"+et.getValue());
  79. }
  80. sb.append("}");
  81. return sb.toString();
  82. }
  83. }
  84. class JsonArray extends Json {
  85. private List<Json> l = new ArrayList<Json>();
  86. JsonArray(Object[] v){
  87. for(Object et : v){ l.add(toJson(et)); }
  88. }
  89. @Override Json get(int index){ return l.get(index); }
  90. @Override Iterable<Json> each(){return l;}
  91. @Override public String toString(){return l.toString();}
  92. }
  93.  
Success #stdin #stdout 0.04s 320576KB
stdin
Standard input is empty
stdout
--property-------------------
v[language][2] = "Spanish"
--for------------------------
"occupation"=["Programmer", "System Engineer"]
"phone"="+81-90-0000-0000"
"name"="John Lennon"
"language"=["Japanese", "English", "Spanish", "Chinease"]
"email"="foobar@gmail.com"
"hobby"=["Photography", "Traveling", "Fishing", "Onsen"]
--toString-------------------
{"occupation":["Programmer", "System Engineer"], "phone":"+81-90-0000-0000", "name":"John Lennon", "language":["Japanese", "English", "Spanish", "Chinease"], "email":"foobar@gmail.com", "hobby":["Photography", "Traveling", "Fishing", "Onsen"]}