jsonをjava beanに変換

Jsonをjava beanに変換してくれるライブラリが数え切れないほど沢山ありますが、本日はグーグルに開発されたgsonライブラリーを紹介させていただきます。

まずはjsonデータを取得し、string型にします。その次はgsonライブラリでjava beanを生成します。一つ目の引数はjsonソース(string)、二つ目は戻り型のクラスです。

import com.google.gson.Gson;
...


String siteJson = "{\"data1\":100,\"data2\":\"hello\",\"list\":[\"String 1\",\"String 2\",\"String 3\"]}";                       


//beanオブジェクト生成
yourBean bean = new Gson().fromJson(siteJson, yourBean.class);  

※ jsonの中にdate型の変数が入ってる場合はstring型に変えて下さい。なぜなら、ライブラリがdate型に対応しないようです。

データ重複を避けるために、DRY原則に従って、柔軟なシステムを構築しましょう。上に記述したコードを利用して、抽象クラスを作成します。
引数1:元のJson文字列
引数2:Jsonから抽出したい文字列
引数3:beanフクラス

public static baseBean parse(String jString, String toExtract, Class myClass)  {


        Bean bean = null;
        
        try {
                
                //Beanの子クラスをインスタンス
                bean = (Bean) Class.forName (myClass.getName()).newInstance ();
                
                //JSONオブジェクト化
                JSONObject jObject = new JSONObject(jString);


                //抽出したい文字列                
                JSONObject SiteObject = jObject.getJSONObject(toExtract);
                //文字列化
                String siteJson = SiteObject.toString();
                
                //データParse
                domain = new Gson().fromJson(siteJson, myClass);                        


        //Class.forNameの利用のため、必要なcatch処理を追加
        } catch (IllegalAccessException e1) {
                e1.printStackTrace();
        } catch (InstantiationException e1) {
                e1.printStackTrace();
        } catch (ClassNotFoundException e1) {
                e1.printStackTrace();
        }finally{
                return bean;
        }
}

beanファイルの親クラスをお作ります。

public class baseBean {
                
        /**
         * constructor
         */
        public void DomainDao(){}

Beanクラス(子クラス)

public Bean1 extends baseBean {
        private int id;

        public int getId() {
                return id;
        }
        public void setId(int id) {
                this.id = id;
        }


}


public Bean2 extends baseBean {
        private int name;

        public int getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }


}

関数の呼び出しは下記の通りとなります。

public Bean1 selectBean1 () throws Exception{                
        String json = ...;        //JSONデータアクセス                
        
        //jsonの【site】情報を取得し、Beanファイルに代入
        return (Bean1) parse(json, "site", Bean1.class);
        
}

public Bean2 selectBean2 () throws Exception{                
        String json = ...;        //JSONデータアクセス                
        
        //jsonの【site】情報を取得し、Beanファイルに代入
        return (Bean2) parse(json, "myParam", Bean2.class);
        
}

誰かの役にたてれば、幸いです。

By johann

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中