Jacksonとは
JSONをJavaで取り扱うためのいろいろなクラスやインターフェースを提供してくれるAPI。
Jacksonには以下の3つのjarが用意されている。
- Jackson Core
ストリーミング、パーサー、ジェネレータ機能を含むパッケージ - Jackson Annotations
アノテーションが用意されたパッケージ - Jackson databind
データバインディングとツリーモデルを提供してくれるパッケージ
これらの説明は次のリンクで
-
JSONの解説
JSON - Wikipedia
JSONホーム -
Jacksonうんぬん
Jackson Home<-- 昔はあったんですが、今はもうないようです
Jackson Github
Jacksonの便利な使い方 [初心者向け] - Qiita
JsonFactoryクラス
Jacksonのファクトリークラス。
createGeneratorメソッド
JSONジェネレーターを生成するメソッドで、これを記述しないと始まらない。
第1引数にはFile、OutputStream、Writer型を指定して、Writer型以外は第2引数にJSONEncodingを指定することができる。尚、バージョン2.2以前はcreateJSONGeneratorメソッドも使われていたが、2.2以降は使用できなくなっている。
JsonGenerator抽象クラス
writeStartObject抽象メソッド
"{"を書き込む抽象メソッド。
writeFieldName抽象メソッド
フィールド名を記述する抽象メソッド。
writeStartArray抽象メソッド
配列の初めを表す"["を記述する抽象メソッド。
flush抽象メソッド
createGeneratorメソッドで指定したOutputStreamとWriterを指定したディレクトリに出力する抽象メソッド。
writeStringFieldメソッド
第1引数にフィールド名、第2引数に値を指定するメソッド。
writeBooleanFieldメソッド
第1引数にフィールド名、第2引数にBoolean値を指定するメソッド。
writeEndObject抽象メソッド
"}"を書き込む抽象メソッド。
writeEndArray抽象メソッド
配列の終わりを表す"]"を記述する抽象メソッド。
実際にJSONをJavaで生成してみる
{"fieldname1":"value1","isFieldname":true,"array":[{"fieldname2":"value2","fieldname3":"value3","fieldname4":"value4"}],"fieldname5":"value5"}
のようなJSONをJavaで記述したいとなったときは
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
public class JSONFactorySample {
public static void main(String[] args) throws IOException {
Writer out = new PrintWriter("JSON/test.json");
JsonFactory jsonFactory = new JsonFactory();
JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(out);
jsonGenerator.writeStartObject(); //{
jsonGenerator.writeStringField("fieldname1","value1"); //{"fieldname1":"value1"
jsonGenerator.writeBooleanField("isFieldname",true); //{"fieldname1":"value1","isFieldname":true,"array"
jsonGenerator.writeFieldName("array"); //{"fieldname1":"value1","isFieldname":true,"array":[
jsonGenerator.writeStartArray(); //{"fieldname1":"value1","isFieldname":true,"array":[
jsonGenerator.writeStartObject(); //{"fieldname1":"value1","isFieldname":true,"array":[{
jsonGenerator.writeStringField("fieldname2","value2"); //{"fieldname1":"value1","isFieldname":true,"array":[{"fieldname2":"value2"
jsonGenerator.writeStringField("fieldname3","value3"); //{"fieldname1":"value1","isFieldname":true,"array":[{"fieldname2":"value2","fieldname3":"value3"
jsonGenerator.writeStringField("fieldname4","value4"); //{"fieldname1":"value1","isFieldname":true,"array":[{"fieldname2":"value2","fieldname3":"value3","fieldname4":"value4"
jsonGenerator.writeEndObject(); //{"fieldname1":"value1","isFieldname":true,"array":[{"fieldname2":"value2","fieldname3":"value3","fieldname4":"value4"}
jsonGenerator.writeEndArray(); //{"fieldname1":"value1","isFieldname":true,"array":[{"fieldname2":"value2","fieldname3":"value3","fieldname4":"value4"}]
jsonGenerator.writeStringField("fieldname5","value5"); //{"fieldname1":"value1","isFieldname":true,"array":[{"fieldname2":"value2","fieldname3":"value3","fieldname4":"value4"}],"fieldname5":"value5"
jsonGenerator.writeEndObject(); //{"fieldname1":"value1","isFieldname":true,"array":[{"fieldname2":"value2","fieldname3":"value3","fieldname4":"value4"}],"fieldname5":"value5"}
jsonGenerator.flush(); //Output to specified directory.
}
}
と書くとJSONフォルダ内にtest.jsonが生成される。
さいごに
codehausとかfasterxmlとかでバージョン違うし、はじめは違いがわからんかったw