Json的使用

1.聲明,該實作參看了 http://www.blogjava.net/wuxufeng8080/articles/169035.html

2.Json-lib的使用依賴的jar包有:commons-lang.jar, commons-logging.jar,commons-beanutils.jar,

commons-collections.jar,xom-1.0-2005-01-05.jar, ezmorph-1.0.1.jar

3.實作代碼

  package joe.json;

import java.beans.PropertyEditorSupport;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONObject;

import org.springframework.beans.BeanWrapperImpl;
import org.springframework.beans.MutablePropertyValues;



/**
 * Json幫助類,提供Json字符串和Model類之間相互轉化的操作
 * @author 黃少森 軟件開發部-斯凱文<br>
 * @created in 2008-9-17 上午11:29:43
 */
public class JsonHelper {
   
    /**
     * 直接把Json字符串轉化成model對象List
     * @param key 要獲得的對象Json對象數組的名稱
     * @param jsonStr Json字符串
     * @param model model類文件
     * @return 返回一個Model類的列表
     */
    public static List convertJson2Objects(String key , String jsonStr , Class model){
       
        List modelList = new ArrayList();
        JSONObject jo = JSONObject.fromObject(jsonStr);
        List list = (List)jo.get(key);
        if (list != null && list.size() > 0){
            for(int i = 0 ; i < list.size() ; i ++){
                BeanWrapperImpl bw = new BeanWrapperImpl(model);
                bw.setPropertyValues(new MutablePropertyValues((Map)list.get(i)), true);
                Object obj = bw.getWrappedInstance();
                modelList.add(obj);
            }
        }
        return modelList;
       
       
    }
   
    /**
     * 直接把Json字符串轉化成model對象List (支持model裏含有子類型)
     * @param key 要獲得的對象Json對象數組的名稱
     * @param jsonStr Json字符串
     * @param model model類文件
     * @param childModel 子類型,是一個數組(model類裏的屬性有可能有多個類型 )
     * @return 返回一個Model類的列表
     */
    public static List convertJson2Objects(String key , String jsonStr , Class model , final Class [] childModel){
       
        List modelList = new ArrayList();
        JSONObject jo = JSONObject.fromObject(jsonStr);
        List list = (List)jo.get(key);
        if (list != null && list.size() > 0){
           
            //先生成一個Bean映射的模板
           
            if (childModel != null){
                for(int i = 0 ; i < list.size() ; i ++){
                    BeanWrapperImpl bw = new BeanWrapperImpl(model);
                   
                    for (int k = 0 ; k < childModel.length ; k ++){
                       
                        final int j = k;
                        bw.registerCustomEditor(childModel[j], new PropertyEditorSupport(){
                           
                            public void setValue(Object value) {
                                BeanWrapperImpl childBW = new BeanWrapperImpl(childModel[j]);
                                childBW.setPropertyValues(new MutablePropertyValues((Map)value), true);
                                super.setValue(childBW.getWrappedInstance());
                            }
                           
                        });
                    }
                    bw.setPropertyValues(new MutablePropertyValues((Map)list.get(i)), true);
                    Object obj = bw.getWrappedInstance();
                    modelList.add(obj);
                }
            } else {
                convertJson2Objects( key ,  jsonStr ,  model);
            }
           
        }
        return modelList;
    }
   

   
    /**
     * 把Json對象轉化成JavaModel(支持子類型的轉化)
     * @param params 對象參數
     * @param model 轉化的model類
     * @param childModel 子類型,是一個數組(model類裏的屬性有可能有多個類型 )
     * @return
     */
    public static Object generateBean(Map params, Class model , final Class[] childModel) {
       
        BeanWrapperImpl bw = new BeanWrapperImpl(model);
       
        if (childModel != null){
           
            for (int i = 0 ; i < childModel.length ; i ++){
               
                final int j = i;
                bw.registerCustomEditor(childModel[j], new PropertyEditorSupport(){
                   
                    public void setValue(Object value) {
                        BeanWrapperImpl impl = new BeanWrapperImpl(childModel[j]);
                        impl.setPropertyValues(new MutablePropertyValues((Map)value), true);
                        super.setValue(impl.getWrappedInstance());
                    }
                   
                });
            }
        }

        bw.setPropertyValues(new MutablePropertyValues(params), true);
        return bw.getWrappedInstance();

    }
   
    /**
     * 把Json對象轉化成JavaModel
     * @param params 對象參數
     * @param model 轉化的model類
     * @return
     */
    public static Object generateBean(Map params, Class  model) {
        BeanWrapperImpl bw = new BeanWrapperImpl(model);

        bw.setPropertyValues(new MutablePropertyValues(params), true);
        return bw.getWrappedInstance();

    }
   
    public static void main(String[] args) {
        //String jsonStr = request.getParameter("data");
        String jsonStr = "{list:[{id:'20',name:'dd'}]}";
        List<Blog> blogList = JsonHelper.convertJson2Objects("list", jsonStr, Blog.class, new Class[]{Blog.class});
       
        for (Blog b: blogList) {
            System.out.println(b.getId()+","+ b.getName());
        }
    }
   
}

發佈了38 篇原創文章 · 獲贊 0 · 訪問量 1759
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章