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へのマッピングなど
柔軟に対応できるようになっている。