つい忘れがちなJacksonでJSONを変換する方法まとめ
2019-07-13
JavaでJSONを扱うアプリケーションを書いているとよくお世話になるJacksonですがSpringを使っていると変換処理自体はSpring側でよしなにやってもらえるのでObjectMapper
で直接変換処理を書くことは少ないです。
テストコードを書く時などたまに変換したくなる時がありますが、たまにしか書かなくて変換方法を忘れがちなのでまとめました。
オブジェクト → JSON
JSONに変換する時はシンプルでwriteValueAsString
に変換したいオブジェクトを渡すだけOK。
var json = objectMapper.writeValueAsString(myObj);
変換結果の細かい調整は変換するクラスにアノテーションをつける必要がありますが今回の趣旨とは外れるのでその辺の説明は省略します。
JSON → オブジェクト
Javaオブジェクトに変換する時はreadValue
にJSONと変換方法を指定します。
マッピング用のクラスがある場合はクラスを指定します。
var myData = objectMapper.readValue(json, MyData.class);
変換時の細かい調整は変換するクラスにアノテーションをつける必要がありますが今回の趣旨とは外れるのでその辺の説明は省略します。
クラス用意するのサボってMap
かList
に変換したい場合はTypeReference
を指定します。
// オブジェクトなJSONの場合
var map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {});
// 配列なJSONの場合
var list = objectMapper.readValue(json, new TypeReference<List<Object>>() {});
中身が複雑だったりしてMap
よりもう少し真面目に扱いたい場合はJsonNode
が便利。
var root = objectMapper.readValue(json, JsonNode.class);
JsonNodeからクラスに変換したい場合はconvertValue
を使います。
var myData = objectMapper.convertValue(root, MyData.class);