Java/JSON Jacksonを使ってみる マッピング編

Jacksonとは

Jacksonはhttp://jackson.codehaus.org/で開発されている
JSONデータをJavaにマッピングするためのライブラリ。

jackson-databindを利用すればJavaオブジェクトへ直接データをマッピングできる。

jacksonを利用するにあたって、どのようにJavaオブジェクトへマッピングされるのかを検証してみました。

Javaオブジェクトへのマッピング方法

下記のような構文でJavaオブジェクトへマッピングする事ができます。
入力にはString、File、InputStream、Readerなどが、
出力にはString、File、OutputStream、Writerなどが指定可能です。

ObjectMapper mapper = new ObjectMapper();

// 文字列からのデシリアライズ
Person person = mapper.readValue(
	"{\"name\":\"Person1\",\"age\":20}",
	Person.class));
	
// 文字列へのシリアライズ。
System.out.println(
	mapper.writeValueAsString(person));

メソッドについての詳細は割愛。
どのようにマッピングされるかを検証する。

クラスへデータをマッピングする

JSON

{"name":"Person1", "age":20}

Personクラス

package jackson.sample;

import java.math.BigDecimal;

public class Person 
{
	public String name;
	public int age;
}

JavaBeansのプロパティを作成せずとも(getter、setterを作成せずとも)
パブリックなフィールドを同等の物としてマッピングできる。

ネストされたプロパティへデータをマッピングする

JSON

{
	"person1":	{"name":"Person1", "age":0.1},
	"person2":	{"name":"Person2", "age":0.1}
}

PersonPairクラス

package jackson.sample;

public class PersonPair 
{
	public Person person1;
	public Person person2;
}

クラスの配列へデータをマッピングする

クラスの配列へマッピングする例。

JSON

[
	{"name":"Person1", "age":20},
	{"name":"Person2", "age":21}
]

readValueでPerson[].classを指定すればマッピングできる。

Listへデータをマッピングする

プロパティへリストをマッピングする例。

JSON

{
	"persons":	[
		{"name":"Person1", "age":20},
		{"name":"Person2", "age":21}
	]
}

Personsクラス

package jackson.sample;

import java.util.List;

public class Persons2
{
	public List<Person> persons;
}

クラスのプロパティでさえあればList<Person>へマッピングできる。

まとめ

JacksonではネストされたプロパティやクラスのListへのマッピングなど
柔軟に対応できるようになっている。