自己封裝的json工具類


package com.develop.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import net.sf.json.util.JSONUtils;
import net.sf.json.util.PropertyFilter;

public class JsonUtil {
    /**
     * 轉成jsonOjbect對象
     * @param obj
     * @return
     */
    public static JSONObject toJsonOjbect(Object obj){
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//可防止hibernate模式下的關聯關系子對象中包含父對象造成死循環
        JSONObject jsonObject = JSONObject.fromObject(obj,jsonConfig);
        return jsonObject;
    }
    
    /**
     * 轉成jsonArray對象
     * @param obj
     * @return
     */
    public static JSONArray toJsonArray(Object obj){
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//可防止hibernate模式下的關聯關系子對象中包含父對象造成死循環
        JSONArray jsonArray = JSONArray.fromObject(obj,jsonConfig);
        return jsonArray;
    }
    
    /**
     * json串或jsonobject對象轉成Map
     * @param obj
     * @return
     */
    public static Map<?, ?> jsonToMap(Object obj){
        JSONObject jsonObject = null;
        if(obj instanceof JSONObject){
            jsonObject = (JSONObject)obj;
        }else{
            jsonObject = JSONObject.fromObject(obj);
        }

        Map<Object, Object> map = new HashMap<Object, Object>(jsonObject.size());
        Iterator<?> it = jsonObject.keys();
        while(it.hasNext()){
            Object key = it.next();
            Object value = jsonObject.get(key);
            if(value instanceof JSONObject){
                map.put(key, jsonToMap(value));
            }else if(value instanceof JSONArray){
                map.put(key, jsonArrToList(value));
            }else{
                map.put(key, value);
            }
        }
        
        return map;
    }
    
    /**
     * list串或jsonArray對象轉成list
     * @param obj
     * @return
     */
    public static List<?> jsonArrToList(Object obj){
        
        JSONArray jsonArray = null;
        if(obj instanceof JSONArray){
            jsonArray = (JSONArray)obj;
        }else{
            jsonArray = JSONArray.fromObject(obj);
        }
        
        List list = new ArrayList(jsonArray.size());
        Iterator<?> it = jsonArray.iterator();
        while(it.hasNext()){
            Object next = it.next();
            if(next instanceof JSONObject){
                list.add(jsonToMap(next));
            }else if(next instanceof JSONArray){
                list.add(jsonArrToList(next));
            }else{
                list.add(next);
            }
        }
        
        return list;
    }
    
    /**
     * json串轉java對象
     * @param jsonStr json串
     * @param rootClass 要轉成的主對象
     * @param subClassMap 主對象中包含的list類型的屬性Map 格式:subClassMap.put("iordersegments", IorderSegment.class); key是子對象在主對象中的屬性名, value是子對象類型
     * @return
     */
    public static <T>T jsonToBean(String jsonStr,Class<T> rootClass,Map<String, Class> subClassMap){
        JsonConfig filterNullConfig = new JsonConfig();
        //過濾掉參數值為null的參數,防止后邊的時間轉換出錯
        filterNullConfig.setJsonPropertyFilter(new PropertyFilter() {
            @Override
            public boolean apply(Object clazz, String name, Object value) {
                boolean isFilter = false;
                if(value==null||"".equals(value)){
                    isFilter = true;
                }
                return isFilter;
            }
        });
        
        JSONObject jsonObject = JSONObject.fromObject(jsonStr,filterNullConfig);
        
        String[] dateFormats = new String[] {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd","yyyy-MM-dd HH:mm"};//不過好像只有   yyyy-MM-dd HH:mm:ss 格式有效
        JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
        
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setRootClass(rootClass);
        if(subClassMap!=null&&subClassMap.size()>0){
            jsonConfig.setClassMap(subClassMap);
        }

        return (T)JSONSerializer.toJava(jsonObject, jsonConfig);
    }
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM