いまさら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)が解釈してくれるんだし・・・
ユルさって好きなんだけどな。。。