JavaでJacksonを利用した「JSON文字列からJavaBeansオブジェクト」、「JavaBeansオブジェクトからJSON文字列」への変換ソース例をご紹介します。
Jacksonのダウンロード
- 以下サイトへアクセスして「Annotations」、「Core」、「Databind」をそれぞれダウンロードします。
ダウンロード先:https://mvnrepository.com/artifact/com.fasterxml.jackson.core
- ダウンロードした下記ファイルをEclipseのpluginへ追加し、Eclipseを再起動します。
- jackson-annotations-2.5.0.jar
- jackson-core-2.5.0.jar
- jackson-databind-2.5.0.jar
- プロジェクトのプロパティから「Javaのビルド・パス」を選択し「外部Jar追加」から上記で追加したjarファイルを選択して追加すれば準備完了です。
Javaソース
JavaBeansクラス
以下は通常のJavaBeansクラスですが、Jacksonではアノテーションを指定する事でプロパティ名を変更したり、任意のフィールドを変換対象外にする事も出来ます。
-
- プロパティ名を変更(フィールド宣言の手前に指定):@JsonProperty(“hoge”)
- 任意のフィールドを変換対象外(1フィールド毎の場合、フィールド宣言の手前に指定):@JsonIgnore
- 任意のフィールドを変換対象外(まとめて指定する場合、クラス宣言の手前に指定):@JsonIgnoreProperties({“hoge1”, “hoge2”})
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
/** * <p>[概 要] SampleBean。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * <p>[環 境] </p> */ @SuppressWarnings("serial") public class SampleBean { /** * 番号 */ private Integer no; /** * データ */ private String data; /** * <p>[概 要] 番号を取得する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @return 番号 */ public Integer getNo() { return no; } /** * <p>[概 要] 番号を設定する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param no 番号 */ public void setNo(Integer no) { this.no = no; } /** * <p>[概 要] データを取得する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @return データ */ public String getData() { return data; } /** * <p>[概 要] データを設定する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param data データ */ public void setData(String data) { this.data = data; } } |
JSON文字列からJavaBeansオブジェクトへの変換
JSON文字列からJavaBeansオブジェクトへ変換する際は「ObjectMapper」クラスの「readValue」メソッドを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/** * <p>[概 要] JSON文字列⇒基本型(JavaBeans)への変換処理(Jackson版)</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param jsonStr JSON形式の文字列 * @return 基本型(JavaBeans)オブジェクト(パラメータがnullの場合はnullを返します。) * @throws IOException * @throws JsonMappingException * @throws JsonParseException */ public static SampleBean parseJsonToBeanByJackson(String jsonStr) throws JsonParseException, JsonMappingException, IOException{ if(jsonStr == null){ // パラメータがnullの場合、nullを返します return null; } // Jacksonのマッパーを生成 ObjectMapper mapper = new ObjectMapper(); // JavaBeansオブジェクトをJSON文字列へ変換 SampleBean bean = mapper.readValue(jsonStr, SampleBean.class); return bean; } |
JavaBeansオブジェクトからJSON文字列への変換
JavaBeansオブジェクトからJSON文字列へ変換する際は「ObjectMapper」クラスの「writeValueAsString」メソッドを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/** * <p>[概 要] 基本型(JavaBeans)⇒JSON文字列への変換処理(Jackson版)</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param bean JavaBeansオブジェクト * @return JSON変換後の文字列(パラメータがnullの場合はnullを返します。) * @throws JsonProcessingException */ public static String parseBeanToJsonByJackson(SampleBean bean) throws JsonProcessingException{ if(bean == null){ // パラメータがnullの場合、nullを返します return null; } // Jacksonのマッパーを生成 ObjectMapper mapper = new ObjectMapper(); // JavaBeansオブジェクトをJSON文字列へ変換 String jsonStr = mapper.writeValueAsString(bean); return jsonStr; } |
JUnitサンプル
JSON文字列からJavaBeansオブジェクトへの変換用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
@Test public void parseJsonToBeanByJacksonTest_Normal() { // 準備 String param = "{\"no\":100,\"data\":\"JSON変換文字列テスト\"}"; // 期待値 SampleBean expected = new SampleBean(); expected.setNo(100); expected.setData("JSON変換文字列テスト"); // 実行 SampleBean result1 = null; SampleBean result2 = null; try { result1 = UtilSample1.parseJsonToBeanByJackson(param); result2 = UtilSample1.parseJsonToBeanByJackson(null); } catch (JsonParseException e) { // 正常系テストの為、無視 } catch (JsonMappingException e) { // 正常系テストの為、無視 } catch (IOException e) { // 正常系テストの為、無視 } // 検証 assertEquals("番号が一致していません。", expected.getNo(), result1.getNo()); assertEquals("データが一致していません。", expected.getData(), result1.getData()); assertNull("NULLではありません。", result2); } |
JavaBeansオブジェクトからJSON文字列への変換用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
@Test public void parseBeanToJsonByJacksonTest_Normal() { // 準備 SampleBean bean = new SampleBean(); bean.setNo(100); bean.setData("JSON変換文字列テスト"); // 期待値 String expected = "{\"no\":100,\"data\":\"JSON変換文字列テスト\"}"; // 実行 String result1 = null; String result2 = null; try { result1 = UtilSample1.parseBeanToJsonByJackson(bean); result2 = UtilSample1.parseBeanToJsonByJackson(null); } catch (JsonProcessingException e) { // 正常系テストの為、無視 } // 検証 assertEquals("JSON文字列が一致していません。", expected, result1); assertNull("NULLではありません。", result2); } |