いまさらjavaとかもう書かないと思ったけど、ちょっと興味があったので試してみた
Java のJSON実装 json.orgからの抜粋
Json のパーサーだけでこんなにあってJava隆盛を感じる。流行ってるんですねJava*1
org.json. org.json.me. Jackson JSON Processor. Json-lib. JSON Tools. Stringtree. SOJO. Jettison. json-taglib. XStream. Flexjson. JON tools. Argo. jsonij. fastjson. mjson. jjson. json-simple. json-io. JsonMarshaller. google-gson. Json-smart. FOSS Nova JSON. Corn CONVERTER
json-simple を使ってみた。
名前から想像して楽そうだったので、選んだ。深い理由はない。
ダウンロード
wget https://json-simple.googlecode.com/files/json-simple-1.1.1.jar
サンプルコード
import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; class Hello{ public Hello(){ } public static void main(String args[] ) throws Exception { System.out.println("test"); JSONParser parser = new JSONParser(); String s="{ \"name\": \"takuya\" }"; Object obj = parser.parse(s); JSONObject json = (JSONObject)obj; System.out.println("name=" + json.get("name")); } }
コンパイル
javac -classpath json-simple-1.1.1.jar Hello.java
実行
java -classpath .:json-simple-1.1.1.jar Hello
エラーサンプル
念のため、クラスパスをミスってみた場合のエラー。
Exception in thread "main" java.lang.NoClassDefFoundError: Hello Caused by: java.lang.ClassNotFoundException: Hello at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/JSONParser at Hello.main(Hello.java:19) Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.JSONParser at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 1 more
jar ファイルにちゃんとclasspathを通す。
JSONが完璧じゃないと解釈しない。
{ name : "takuya" }
これはJSON的には解釈可能だとおもってたら、Javaのsimple-jsonでException吐かれた。
{ "name" : "takuya" }
じゃないとだめらしい・・・・JavaScript的には正しくもJSON的には正しくないって事か。
たしかにそうなんだけど、、、 json てきには pair := string: value / string := "chars" なんだけど。。。解釈して欲しいところではある。他の言語(とくにjavascript)が解釈してくれるんだし・・・
ユルさって好きなんだけどな。。。