【Java】JSON-libでJSONからJavaオブジェクト(Bean)に変換する際の日付型(Date)のフォーマットを指定する

Java,開発

おはようございます。

以前、逆のパターンのサンプルを記事に書いたことがありますが、
今回は JSON から Javaオブジェクトに変換する際の日付の扱いについてです。

変換する際に日付のフォーマットをしていしないと何故かシステム日付で変換されてしまうので、
JSON と Java オブジェクトを相互に変換する必要がある場合は必須の対応ではないでしょうか。

スポンサーリンク

サンプル

以前と同様、PersonクラスをJSONから生成してみる。

JSON文字列

{
	"age": 20,
	"id": 1,
	"name": "サンプル 一郎",
	"updateDate": "2019/09/29 10:30"
}

日付は好きなフォーマットで大丈夫ですが、YYYY/MM/DD HH:MM としました。

生成するクラス

Person.java

package jp.co.doraxdora.sample;

import java.io.Serializable;
import java.util.Date;

/**
 * パーソンクラス
 *
 * @author doraxdora
 *
 */
public class Person implements Serializable {

	/** ID */
	private int id;
	/** 氏名 */
	private String name;
	/** 年齢 */
	private int age;
	/** 更新日時 */
	private Date updateDate;

	public Person() {
	}

	/**
	 * パーソンの生成
	 *
	 * @param id
	 * @param name
	 * @param age
	 */
	public Person(int id, String name, int age, Date updateDate) {
		this.id = id;
		this.name = name;
		this.age = age;
		this.updateDate = updateDate;
	}

	/**
	 * @return id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id セットする id
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name セットする name
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return age
	 */
	public int getAge() {
		return age;
	}

	/**
	 * @param age セットする age
	 */
	public void setAge(int age) {
		this.age = age;
	}

	/**
	 * @return updateDate
	 */
	public Date getUpdateDate() {
		return updateDate;
	}

	/**
	 * @param updateDate セットする updateDate
	 */
	public void setUpdateDate(Date updateDate) {
		this.updateDate = updateDate;
	}

}

また何故か更新日付をもつパーソンクラス。

JSONからJavaオブジェクトへ変換

import net.sf.ezmorph.MorpherRegistry;
import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONObject;
import net.sf.json.util.JSONUtils;


public class HelloWorld {
    public static void main(String[] args) {

		// フォーマット指定
		MorpherRegistry mr = JSONUtils.getMorpherRegistry();
		mr.registerMorpher(new DateMorpher(new String[] { "yyyy/MM/dd HH:mm" }));
		
		// 変換
		JSONObject jsonObject = JSONObject.fromObject("{\"age\":20, \"id\":1, \"name\":\"サンプル 一郎\", \"updateDate\":\"2019/09/29 10:30\"}");
		Person person = (Person)JSONObject.toBean( jsonObject, Person.class );
    }
}

こんな感じです。

まとめ

日付の扱いは色々と難しいですよね。

大したサンプルではありませんが、何かのお役に立てれば。

ではでは。

 

スポンサーリンク


関連するコンテンツ

Java,開発Java,JSON,サンプルプログラム

Posted by doradora