エンジニアになりたい

立派なエンジニアに憧れるへっぽこエンジニアのメモ書き

Jackson でオブジェクトを JSON に変換

Jackson Java JSON-processor を使ってみます。

1. jar の取得

取得するのは

  • jackson-annotations-2.x.x.jar
  • jackson-core-2.x.x.jar
  • jackson-databind-2.x.x.jar

※今回は2.2.3

http://wiki.fasterxml.com/JacksonDownload
http://wiki.fasterxml.com/JacksonDownload
ここからダウンロード


2. 取得した jar をクラスパスに追加


3. こんな感じで使えます

// JSONの文字列に変換するオブジェクト
Person person = new Person("ジャクソン", 28, children);

// 変換
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);

これだけでオブジェクトをJSONの文字列にしてくれます。

出力結果はこんな感じ

{"name":"ジャクソン","age":28,"children":[{"name":"太郎","age":12,"children":null},{"name":"花子","age":10,"children":null}]}

Listも処理してくれてます。
でもnull値なんとかしたいですね。


ちなみに

String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);

こうするとインデントをつけてくれます。

出力結果はこんな感じになります。

{
  "name" : "ジャクソン",
  "age" : 28,
  "children" : [ {
    "name" : "太郎",
    "age" : 12,
    "children" : null
  }, {
    "name" : "花子",
    "age" : 10,
    "children" : null
  } ]
}



以下、全ソース

package sample;

import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {

	public static void main(String[] args) {

		Person son = new Person("太郎", 12);
		Person daughter = new Person("花子", 10);
		List<Person> children = new ArrayList<Person>();
		children.add(son);
		children.add(daughter);

		Person person = new Person("ジャクソン", 28, children);

		ObjectMapper objectMapper = new ObjectMapper();
		try {
			String json = objectMapper.writeValueAsString(person);
			System.out.println(json);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
	}

	public static class Person {
		public String name;
		public int age;
		public List<Person> children;

		Person(String name, int age) {
			this.name = name;
			this.age = age;
		}

		Person(String name, int age, List<Person> children) {
			this(name, age);
			this.children = children;
		}
	}
}