つい忘れがちな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);