Jackson ObjectMapper Json <-> Java オブジェクト変換の使い方
Jackson ObjectMapper
を使って、Java オブジェクトと Json を変換する方法。REST API 開発の際に、コントローラのユニットテストでよく使ったのでメモ。
用語も忘れるのでメモしておく。
シリアライズ ( serialize ) : Java オブジェクト -> Json に変換
デシリアライズ ( deserialize ) : Json -> Java オブジェクトに変換
Contents
使用するデータ
サンプルで使う Java オブジェクト
public class Hoge {
private int id;
private String type;
// Getter & Setter
}
フィールドが public
なら、Getter と Setter がなくても変換可能。public
以外なら、Getter と Setter がいる。
Java オブジェクト -> Json 文字列
ObjectMapper objectMapper = new ObjectMapper();
Hoge hoge = new Hoge(99, "type1");
String jsonAsString = objectMapper.writeValueAsString(hoge);
Output
{"id":99,"type":"type1"}
Json -> Java オブジェクト
ObjectMapper objectMapper = new ObjectMapper();
Hoge hoge = objectMapper.readValue(json, Hoge.class);
Java オブジェクト -> Json ファイル出力
変換結果をファイル出力できる。
ObjectMapper objectMapper = new ObjectMapper();
Hoge hoge = new Hoge(99, "type1");
objectMapper.writeValue(new File("../hoge.json"), hoge);
Json ファイル -> Java オブジェクト
Json をファイルから読み込むことができる。
ObjectMapper objectMapper = new ObjectMapper();
Hoge hoge = objectMapper.readValue(new File("../../hoge.json"), Hoge.class);
Json -> Java オブジェクトの List
List
などにデシリアライズする場合は、TypeReference
を使う。
String json = "[{ \"id\" : 99, \"type\" : \"type1\" }, { \"id\" : 100, \"type\" : \"type2\" }]";
ObjectMapper objectMapper = new ObjectMapper();
List<Hoge> list = objectMapper.readValue(json, new TypeReference<List<Hoge>>() {});
Json -> Java Map
TypeReference
を使って、Map
に変換する。
String json = "{ \"id\" : 99, \"type\" : \"type1\" }";
Map<String, Object> map
= objectMapper.readValue(json, new TypeReference<Map<String,Object>>(){});
シリアライズ時の Date フォーマット
シリアライズ時のデフォルト Date
フォーマットはエポック秒。60484389 みたいな数字になる。
サンプルの Java オブジェクト。
public class HogeDate
{
private Date someDate;
// Getter & Setter
}
シリアライズ時にフォーマットする。
ObjectMapper objectMapper = new ObjectMapper();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
objectMapper.setDateFormat(df);
String json = objectMapper.writeValueAsString(hogeDate);
Output
{"someDate":"2021-08-01 10:00"}