【Java】JSON-libでJSONからJavaオブジェクト(Bean)に変換する際の日付型(Date)のフォーマットを指定する
おはようございます。
以前、逆のパターンのサンプルを記事に書いたことがありますが、
今回は JSON から Javaオブジェクトに変換する際の日付の扱いについてです。
変換する際に日付のフォーマットをしていしないと何故かシステム日付で変換されてしまうので、
JSON と Java オブジェクトを相互に変換する必要がある場合は必須の対応ではないでしょうか。
スポンサーリンク
サンプル
以前と同様、PersonクラスをJSONから生成してみる。
JSON文字列
1 2 3 4 5 6 | { "age":20, "id":1, "name":"サンプル 一郎", "updateDate":"2019/09/29 10:30" } |
日付は好きなフォーマットで大丈夫ですが、YYYY/MM/DD HH:MM としました。
生成するクラス
Person.java
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | packagejp.co.doraxdora.sample; import java.io.Serializable; import java.util.Date; /** * パーソンクラス * * @author doraxdora * */ publicclassPersonimplementsSerializable{ /** ID */ privateintid; /** 氏名 */ privateStringname; /** 年齢 */ privateintage; /** 更新日時 */ privateDate updateDate; publicPerson(){ } /** * パーソンの生成 * * @param id * @param name * @param age */ publicPerson(intid,Stringname,intage,Date updateDate){ this.id=id; this.name=name; this.age=age; this.updateDate=updateDate; } /** * @return id */ publicintgetId(){ returnid; } /** * @param id セットする id */ publicvoidsetId(intid){ this.id=id; } /** * @return name */ publicStringgetName(){ returnname; } /** * @param name セットする name */ publicvoidsetName(Stringname){ this.name=name; } /** * @return age */ publicintgetAge(){ returnage; } /** * @param age セットする age */ publicvoidsetAge(intage){ this.age=age; } /** * @return updateDate */ publicDate getUpdateDate(){ returnupdateDate; } /** * @param updateDate セットする updateDate */ publicvoidsetUpdateDate(Date updateDate){ this.updateDate=updateDate; } } |
また何故か更新日付をもつパーソンクラス。
JSONからJavaオブジェクトへ変換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | importnet.sf.ezmorph.MorpherRegistry; importnet.sf.ezmorph.object.DateMorpher; importnet.sf.json.JSONObject; importnet.sf.json.util.JSONUtils; publicclassHelloWorld{ publicstaticvoidmain(String[]args){ // フォーマット指定 MorpherRegistry mr=JSONUtils.getMorpherRegistry(); mr.registerMorpher(newDateMorpher(newString[]{"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); } } |
こんな感じです。
まとめ
日付の扱いは色々と難しいですよね。
大したサンプルではありませんが、何かのお役に立てれば。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません