Javaその他

ObjectMapperを利用してJavaBeanオブジェクトとJSON文字列の変換をしてみた

今回は、ObjectMapperを利用すると、JavaBeanオブジェクトとJSON文字列の変換が簡単に行えることがわかったので、そのサンプルプログラムを共有する。

JSONの形式については、以下のサイトを参照のこと。
https://www.sejuku.net/blog/80617

前提条件

下記記事の「IntelliJ IDEA上でSpring Bootプロジェクトの読み込み」まで完了していること。

IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...

サンプルプログラムの内容

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠のうち、「build.gradle」は今回変更したプログラムで、他は新規で作成したプログラムとなる。

「build.gradle」の内容は以下の通り。lombokとObjectMapperを利用できるような設定を追加している。

plugins {
	id 'org.springframework.boot' version '2.1.7.RELEASE'
	id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	//lombokを利用するための設定
	compileOnly 'org.projectlombok:lombok:1.18.10'
	annotationProcessor 'org.projectlombok:lombok:1.18.10'
	//ObjectMapperを利用するための設定
	compile 'com.fasterxml.jackson.core:jackson-databind:2.3.4'
}



また、DemoFormオブジェクトの内容は以下の通り。lombokを利用したJavaBeansになっている。

package com.example.demo;

import lombok.Data;

@Data
public class DemoForm {

    /** ID */
    private String id;

    /** 名前 */
    private String name;

    /** 生年月日_年 */
    private String birthYear;

    /** 生年月日_月 */
    private String birthMonth;

    /** 生年月日_日 */
    private String birthDay;

    /** 性別 */
    private String sex;

    /** メモ */
    private String memo;

}
「DesignEvo」は多くのテンプレートからロゴを簡単に作成できるツールだった多くのテンプレートが用意されていてロゴを簡単に作成できるツールの一つに、「DesignEvo」があります。今回は、「DesignEvo」...

さらに、DemoMainクラスの内容は以下の通り。ObjectMapperクラスのwriteValueAsStringメソッドで、JavaBeanオブジェクトをJSON文字列に変換し、ObjectMapperクラスのreadValueメソッドで、JSON文字列をJavaBeanオブジェクトに変換している。

package com.example.demo;

import com.fasterxml.jackson.databind.ObjectMapper;

public class DemoMain {

    public static void main(String[] args){
        // JavaBeanオブジェクト(DemoForm)を生成する
        DemoForm demoForm = createDemoForm();
        System.out.println("変換前DemoForm : " + demoForm.toString());
        // JavaBeanオブジェクトとJSONで変換するObjectMapperを生成
        ObjectMapper objectMapper = new ObjectMapper();
        try{
            // JavaBeanオブジェクト(DemoForm)をJSON文字列に変換する
            String jsonStr = objectMapper.writeValueAsString(demoForm);
            System.out.println("変換後JSON : " + jsonStr);
            // JSON文字列をJavaBeanオブジェクト(DemoForm)に変換する
            DemoForm afterDemoForm = objectMapper.readValue(jsonStr, DemoForm.class);
            System.out.println("変換後DemoForm : " + afterDemoForm.toString());
        }catch (Exception e){
            System.err.println(e);
        }

    }

    // DemoFormオブジェクトを生成
    private static DemoForm createDemoForm(){
        DemoForm demoForm = new DemoForm();
        demoForm.setId("1");
        demoForm.setName("テスト プリン");
        demoForm.setBirthYear("2012");
        demoForm.setBirthMonth("1");
        demoForm.setBirthDay("15");
        demoForm.setSex("2");
        demoForm.setMemo("登録用メモ");
        return demoForm;
    }
}

「DemoMain.java」の実行結果は以下の通りで、JavaBeanオブジェクトとJSON文字列の変換が行われていることが確認できる。
サンプルプログラムの実行結果

要点まとめ

  • ObjectMapperクラスのwriteValueAsStringメソッドで、JavaBeanオブジェクトをJSON文字列に変換できる。
  • ObjectMapperクラスのreadValueメソッドで、JSON文字列をJavaBeanオブジェクトに変換できる。