それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Java でJSONロード

いまさら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)が解釈してくれるんだし・・・


ユルさって好きなんだけどな。。。

*1:たんにjavaが古い言語で、言語標準でサポートしてないから乱立していてカオスっていう皮肉