JSON 轉化爲java對象


JSON做爲一種輕量級數據交換工具,使用是很是方便的。但在同J2EE後臺交互的時候,須要將JSON直接轉化爲咱們工程中的java持久對象經行業務操做或直接持久化到數據庫。如今有不少這種數據轉化工具,咱們項目中使用了JSON-tool第三包,使用的步驟爲: java

1. 接受前臺json數據 數據庫

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

2. 經過接收到的json數據構建一個JSONObject或是一個JSONArray
JSONObject json = new JSONObject(data); app

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;
    } 優化

大功告成,粗略測試,成功。單在有住外鍵的狀況下,仍是沒有處理。 對象

改天在優化一下這個程序。 get

相關文章
相關標籤/搜索