LoginSignup
5
5

More than 3 years have passed since last update.

JacksonでJSONを生成する

Last updated at Posted at 2016-11-25

Jacksonとは

JSONをJavaで取り扱うためのいろいろなクラスやインターフェースを提供してくれるAPI。

Jacksonには以下の3つのjarが用意されている。

  • Jackson Core
    ストリーミング、パーサー、ジェネレータ機能を含むパッケージ
  • Jackson Annotations
    アノテーションが用意されたパッケージ
  • Jackson databind
    データバインディングとツリーモデルを提供してくれるパッケージ

これらの説明は次のリンクで

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で記述したいとなったときは

JSONFactorySample.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

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5