JSON 轉化為java對象

來源:互聯網
上載者:User
 JSON作為一種輕量級資料交換工具,使用是非常方便的。但在同J2EE後台互動的時候,需要將JSON直接轉化為我們工程中的java持久對象經行業務操作或直接持久化到資料庫。現在有很多這種資料轉化工具,我們項目中使用了JSON-tool第三包,使用的步驟為:

1. 接受前台json資料

String data = request.getParameter("data");

2. 通過接收到的json資料構建一個JSONObject或是一個JSONArray
JSONObject json = new JSONObject(data);

3. 通過JSONMapper的tojava()方法將JSONObject轉化為我們需要的對象。

    但在處理的過程中,如果遇到主外部索引鍵關聯的時候很不好處理,容易出錯,所以就想到了根據java的反射
機制動態去轉化JSON對象為pojo對象。

private Object fromJsonToJava(JSONObject json,Class pojo)
        throws Exception{
        // 首先得到pojo所定義的欄位
        Field [] fields = pojo.getDeclaredFields();
        // 根據傳入的Class動態產生pojo對象
        Object obj = pojo.newInstance();
        for(Field field: fields){
            // 設定欄位可訪問(必須,否則報錯)
            field.setAccessible(true);
            // 得到欄位的屬性名稱
            String name = field.getName();
            // 這一段的作用是如果欄位在JSONObject中不存在會拋出異常,如果出異常,則跳過。
            try{
                    json.get(name);
            }catch(Exception ex){
                continue;
            }
            if(json.get(name) != null && !"".equals(json.getString(name))){
                // 根據欄位的類型將值轉化為相應的類型,並設定到產生的對象中。
                if(field.getType().equals(Long.class) || field.getType().equals(long.class)){
                    field.set(obj, StringUtil.parseLong(json.getString(name)));
                }else if(field.getType().equals(String.class)){
                    field.set(obj, json.getString(name));
                } else if(field.getType().equals(Double.class) || field.getType().equals(double.class)){
                    field.set(obj, StringUtil.parseDouble(json.getString(name)));
                } else if(field.getType().equals(Integer.class) || field.getType().equals(int.class)){
                    field.set(obj, StringUtil.parseInt(json.getString(name)));
                } else if(field.getType().equals(java.util.Date.class)){
                    field.set(obj, DateTimeUtil.stringToDate(json.getString(name), "yyyy-MM-dd"));
                }else{
                    continue;
                }
            }
        }
        return obj;
    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.