Jacksonとは
JacksonはJavaで使えるJSONライブラリです。
JSON形式の文字列をJavaのオブジェクトに直接マッピングしたり、逆にJavaオブジェクトをJSON文字列に変換できたりします。
HTTPレスポンスをパースしたりオブジェクトをBase64エンコーディングする時などに便利です。
Usage
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class Main { public static class Obj { private String name; private int value; public Obj(){ } public Obj(String name, int value){ this.name = name; this.value = value; } } public static void main(String... args){ Obj obj = new Obj("apple", 100); String json = getJSONFromObj(obj); Obj newObj = getObjFromJSON(json); } // JavaオブジェクトをJSONに変換 private String getJSONFromObj(Obj obj) { String json = null; ObjectMapper mapper = new ObjectMapper(); try { json = mapper.writeValueAsString(obj); } catch (JsonProcessingException e) { e.printStackTrace(); } return json; } // JSONをJavaオブジェクトに変換 private Obj getObjFromJSON(String json) { ObjectMapper mapper = new ObjectMapper(); Obj obj = null; try { obj = mapper.readValue(json, Obj.class); } catch (Exception e) { e.printStackTrace(); } return obj; } }
パース時の注意
JacksonのObjectMapper
でデシリアライズする際のクラスは、
- 引数なしコンストラクタが定義されていなければならない
- インナークラスはstaticでなければならない(アウタークラスがインスタンス化されないとクラス定義がオンメモリにならないため)
- JSONプロパティはすべて変換後のクラスメンバに存在しなければならない
という制約をクリアしている必要があります。
これらの制約に反していた場合には例外がスローされます。
具体的な注意点は、こちらの方の記事でとてもわかり易くまとめてあったので引用させていただきます。