DynaBean Map JSON 之间的转换工具类

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.LazyDynaBean;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

/**   
* @Title: DynaBeanUtils.java 
* @Package  
* @Description: DynaBean工具类
* @author 灵丰文体 
* @date 2018年05月23日 下午4:59:34 
* @version V1.0   
*/

public class DynaBeanUtils {

    /**
     * 时间格式
     */
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    /**
     * JsonConfig
     */
    private static final JsonConfig jsonConfig = new JsonConfig();
    /**
     * 时间格式
     */
    private static final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);


    /**
     * bean 转换成map
     */
    public static Map<String, Object> convertBeanToMap(DynaBean bean){
        Map<String, Object> map = null;
        if(bean != null){
            map = new HashMap<String, Object>();
            DynaProperty[] properties = bean.getDynaClass().getDynaProperties();
            if(properties != null){
                for(DynaProperty property : properties){
                    map.put(property.getName(), bean.get(property.getName()));
                }
            }
        }
        return map;
    }
    
    /**
     * map 转换成bean
     */
    public static DynaBean convertMapToDynaBean(Map<String, Object> map){
        DynaBean bean = null;
        if(map != null){
            bean = new LazyDynaBean();
            for(String key : map.keySet()){
                bean.set(key, map.get(key));
            }
        }
        return bean;
    }
    
    /**
     * 
     * list<map> 转换成list<Dynabean>
     */
    public static List<DynaBean> convertListMapToListDynaBean(List<Map<String,Object>> listMap){
        List<DynaBean> beans = new LinkedList<DynaBean>();
        if(null != listMap && !listMap.isEmpty()){
            for(Map<String,Object> map : listMap ){
                if(null != map){
                    DynaBean bean = DynaBeanUtils.convertMapToDynaBean(map);
                    beans.add(bean);
                }
            }
        }
        return beans;
    }
    
    /**
     * json 转Map
     */
    public static Map<String,Object> jsonToMap(JSONObject json) throws Exception{
        Map<String,Object> map = new HashMap<String,Object>();
        for(Object key : json.keySet()){
            map.put(key.toString(),json.get(key.toString()));  
        } 
        return map; 
    }
    
    /**
     * dynaBean 转JsonObject
     */
    public static JSONObject convertDynaBeanToJSONObject(DynaBean bean){
        try {
            return JSONObject.fromObject(bean, jsonConfig);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * List<DynaBean> 转JSONObject
     */
    public static JSONObject convertListToJSONObject(List<DynaBean> list){
        try {
            if(list != null &&  !list.isEmpty()){
                DynaProperty[] properties = list.get(0).getDynaClass().getDynaProperties();
                String field = null;
                JSONObject json = new JSONObject();
                for(DynaBean bean : list){
                    JSONObject temp = new JSONObject();
                    for(DynaProperty property : properties){
                        String key = property.getName();
                        if(property.getName().startsWith("F_")){
                            field =  bean.get(key).toString();
                        }else{
                            Object v = bean.get(property.getName());
                            if (v instanceof Timestamp) {
                                v = sdf.format((Timestamp) v);
                            }else if (v instanceof Date) {
                                v = sdf.format((Date) v);
                            }
                            temp.put(key, v);
                        }
                    }
                    Object value = json.opt(field);
                    if (value == null) {
                        if(temp.size() == 1){
                            json.put(field, temp.get(temp.keys().next()));
                        }else{
                            json.put(field, temp);
                        }
                    }else if(value instanceof JSONObject){
                        JSONArray array = new JSONArray();
                        array.add(value);
                        array.add(temp);
                        json.put(field, array);
                    }else if(value instanceof JSONArray){
                        JSONArray array = (JSONArray)value;
                        if (array.get(0) instanceof JSONObject){
                            array.add(temp);
                        }else{
                            array.add(temp.get(temp.keys().next()));
                        }
                        json.put(field, array);
                    }
                }
                return json;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * List<DynaBean> 转JSONArray
     */
    public static JSONArray convertListToJSONArray(List<DynaBean> list){
        try {
            if(list != null && !list.isEmpty()){
                JSONArray array = new JSONArray();
                DynaProperty[] properties = list.get(0).getDynaClass().getDynaProperties();
                for(DynaBean bean : list){
                    JSONObject json = new JSONObject();
                    JSONObject temp = new JSONObject();
                    String field = null;
                    for(DynaProperty property : properties){
                        String key = property.getName();
                        if(key.startsWith("F_")){
                            field = bean.get(key).toString();
                        }else{
                            Object v = bean.get(key);
                            if (v instanceof Timestamp) {
                                v = sdf.format((Timestamp) v);
                            }else if (v instanceof Date) {
                                v = sdf.format((Date) v);
                            }
                            if(key.startsWith("D_")) {
                                temp.put(key, v);
                            }else{
                                json.put(key, v);
                            }
                        }
                    }
                    if(!temp.isEmpty()){
                        if(field != null){
                            Object value = temp;
                            if(temp.size() == 1){
                                value = temp.get(temp.keys().next());
                            }
                            int i = 0;
                            for (; i < array.size(); i++) {
                                JSONObject obj = array.optJSONObject(i);
                                if(obj.toString().replace("{","").replace("}","")
                                        .contains(json.toString().replace("{","").replace("}",""))){
                                    json = obj;
                                    break;
                                }
                            }
                            json.put(field, value);
                            if(i == array.size()){
                                array.add(json);
                            }
                        }else{
                            json.putAll(temp);
                            array.add(json);
                        }
                    }
                }
                return array;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值