快速将List对象、Map对象或者普通普通对象转换成json字符串

package test;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.lang.reflect.Field;
import java.util.Map;

public class JsonUtils {

/**
 * @param obj
 * @return
 * @throws InstantiationException
 * @throws IllegalAccessException
 */
public static String getJsonString(Object obj) throws InstantiationException, IllegalAccessException  {

    //如果传入的对象为集合
    if (obj instanceof Collection) {            
        //执行collectionTojson方法将集合类型转为json格式
        return collectionTojson(obj);           
    }

    //如果获取的对象类型为一个Map集合
    else if (obj instanceof Map) {          
        //执行mapTojson方法将Map类型转为json格式
        return mapTojson(obj);      
    }       
    //如果获取的对象类型为普通对象
    else{           
        //执行classTojson方法将普通类型转为json格式
        return classTojson(obj);            
    }       
}

/**
 * @描述 将集合转为json格式的字符串
 * @param obj
 * @return
 * @throws IllegalArgumentException
 * @throws IllegalAccessException
 */
private static String collectionTojson(Object obj) throws IllegalArgumentException, IllegalAccessException{

    //定义一个StringBuffer类型的字符串
    StringBuffer buffer = new StringBuffer();
    buffer.append("[");     
    Class<? extends Object> clazz = obj.getClass();     
    //获取类中所有的字段
    Field[] declaredFields = clazz.getDeclaredFields();     
    //设置可以获得私有字段的value
    Field.setAccessible(declaredFields, true);  
    //定义全局变量
    boolean listf = false;
    boolean setf = false;
    Set<Object> set = null;
    List<Object> list = null;       
    //遍历获取到的所有字段
    for (Field field : declaredFields) {            
        //getDeclaringClass()同getClasses(),但不局限于public修饰,只要是目标类中声明的内部类和接口均可         
        String simpleName = clazz.getSimpleName();          
         //判断获取到的类型
         if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList")){
            list = (List<Object>) obj;
            listf=true; 
         }
         if(simpleName.equals("HashSet")||simpleName.equals("TreeSet")){
                set = (Set<Object>) obj;
                setf=true; 
         }          
    }

    //如果获取的对象类型为一个List集合
    if(listf == true){          
        return listTojson(buffer, list).toString();     
    }       
    //如果获取的对象类型为一个Set集合
    if(setf == true){           
        buffer = setTojson(set, buffer);        
    }       
    buffer.append("]");     
    return buffer.toString();
}   
/**
 * 描述 将基本类转为json格式
 * @param obj
 * @return
 */
private static String classTojson(Object obj){      
    //通过反射获取到类
    Class<? extends Object> clazz = obj.getClass();     
    //获取类中所有的字段
    Field[] fields = clazz.getDeclaredFields();     
    StringBuffer buffer = new StringBuffer();
    buffer.append("[{");        
    //设置setAccessible方法能获取到类中的私有属性和方法
    Field.setAccessible(fields, true);      
    //遍历所有的方法和属性
    for (Field field : fields) {            
        try {               
            Object object = field.get(obj);             
            //获取到该属性对应类型名称
            String fieldName = field.getType().getSimpleName();             
            //如果该属性的值为空
            if(object == null){                 
                //根据类型判断追加的值
                if(fieldName.equals("String"))
                {
                    buffer.append("\""+field.getName()+"\":\"\",");
                }
                else if(fieldName.equals("Boolean")||fieldName.equals("Integer")||fieldName.equals("Double")||fieldName.equals("Float")||fieldName.equals("Long")){

                    buffer.append("\""+field.getName()+"\":0,");
                }               
                else{
                    buffer.append("\""+field.getName()+"\":null,");
                }                   
            }
            else{                   
                //获取到该属性的值对应的类
                Class<? extends Object> fieldclass = object.getClass();
                String simpleName = fieldclass.getSimpleName();

            if(simpleName.equals("String")){                    
                buffer.append("\""+field.getName()+"\":\""+field.get(obj)+"\",");               
            }
            else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){                    
                buffer.append("\""+field.getName()+"\":"+field.get(obj)+",");
            }
            else if(simpleName.equals("Date")){                 
                Date date = (Date) object;
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                String simdate = simpleDateFormat.format(date);
                buffer.append("\""+field.getName()+"\":\""+simdate+"\",");              
            }
            else if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList"))
            {
                //将获取到的值强转为list集合
                List<Object> list = (List<Object>) object;
                buffer.append("\""+field.getName()+"\":[");                 
                //执行listTojson方法将获取到的list转为json格式
                buffer = listTojson(buffer, list).append("]");
            }
            else if(simpleName.equals("HashSet")||simpleName.equals("TreeSet"))
            {
                //将获取到的值强转为set集合
                buffer.append("\""+field.getName()+"\":[");
                Set<Object> set = (Set<Object>) object;                 
                //执行setTojson方法将获取到的set转为json格式
                buffer = setTojson(set, buffer).append("]");                
            }
            else if(simpleName.equals("HashMap")||simpleName.equals("HashTable"))
            {
                buffer.append("\""+field.getName()+"\":");                  
                //执行mapTojson方法将获取到的map对象转为json格式
                StringBuffer mapbuffer = new StringBuffer(mapTojson(object));
                mapbuffer.deleteCharAt(0);
                buffer.append(mapbuffer);
            }
            else{                       
                    buffer = beanTojson(object,buffer).append(",");
                }
            }               
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    buffer = new StringBuffer(buffer.substring(0,buffer.length()-1));
    buffer.append("}]");        
    return buffer.toString();
}

/**
 * 描述 将map集合转为json格式
 * @param obj
 * @return
 * @throws IllegalArgumentException
 * @throws IllegalAccessException
 */
private static String mapTojson(Object obj) throws IllegalArgumentException, IllegalAccessException{        
    StringBuffer buffer = new StringBuffer();
    Class<? extends Object> clazz = obj.getClass();
    Field[] declaredFields = clazz.getDeclaredFields();
    Field.setAccessible(declaredFields, true);
    buffer.append("[");
    Map<Object,Object> map = (Map<Object, Object>) obj;     
    //通过Map.entrySet使用iterator(迭代器)遍历key和value
    Set<Entry<Object, Object>> set = map.entrySet();  
    Iterator iterator = set.iterator();  
    buffer.append("{");        
    while (iterator.hasNext()){             
        //使用Map.Entry接到通过迭代器循环出的set的值
        Map.Entry  mapentry = (Map.Entry) iterator.next();  
        Object value = mapentry.getValue();            
        //使用getKey()获取map的键,getValue()获取键对应的值
        String valuename = value.getClass().getSimpleName();
        if(valuename.equals("String")){             
            buffer.append("\""+mapentry.getKey()+"\":\""+mapentry.getValue()+"\",");
        }
        else if(valuename.equals("Boolean")||valuename.equals("Integer")||valuename.equals("Double")||valuename.equals("Float")||valuename.equals("Long")){

            buffer.append("\""+mapentry.getKey()+"\":"+mapentry.getValue()+",");
        }
        else if(valuename.equals("Date")){
            Date date = (Date) value;
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            String simdate = simpleDateFormat.format(date);
            buffer.append("\""+mapentry.getKey()+"\":\""+simdate+"\",");
        }else if(valuename.equals("ArrayList")||valuename.equals("LinkedList"))
        {
            List<Object> list = (List<Object>) value;
            buffer.append("\""+mapentry.getKey()+"\":[");
            buffer = listTojson(buffer, list).append("]");
        }
        else if(valuename.equals("HashSet")||valuename.equals("TreeSet"))
        {
            buffer.append("\""+mapentry.getKey()+"\":[");
            Set<Object> sets = (Set<Object>) value;
            buffer = setTojson(sets, buffer).append("]");
        }
        else if(valuename.equals("HashMap")||valuename.equals("HashTable"))
        {
            buffer.append("\""+mapentry.getKey()+"\":");
            StringBuffer mapbuffer = new StringBuffer(mapTojson(value));
            mapbuffer.deleteCharAt(0);
            buffer.append(mapbuffer);
        }
        else{
            buffer.append("\""+mapentry.getKey()+"\":");
            buffer.append("{");

            Class<? extends Object> class1 = value.getClass();
            Field[] fields = class1.getDeclaredFields();
            Field.setAccessible(fields, true);

            for (Field field : fields) {

                Object object = field.get(value);
                String fieldName = field.getType().getSimpleName();

                if(object == null){
                    if(fieldName.equals("String"))
                    {
                        buffer.append("\""+field.getName()+"\":\"\",");
                    }

                    else{
                        buffer.append("\""+field.getName()+"\":null,");
                    }

                }
                else{

                    Class<? extends Object> fieldclass = field.get(value).getClass();
                    String simpleName = fieldclass.getSimpleName();
                    if(simpleName.equals("String")){

                        buffer.append("\""+field.getName()+"\":\""+field.get(value)+"\",");
                    }
                    else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

                        buffer.append("\""+field.getName()+"\":"+field.get(value)+",");
                    }
                    else if(simpleName.equals("Date")){
                        Date date = (Date) object;
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                        String simdate = simpleDateFormat.format(date);
                        buffer.append("\""+field.getName()+"\":\""+simdate+"\",");
                    }
                    else if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList")){

                        List<Object> list = (List<Object>) object;
                        buffer.append("\""+field.getName()+"\":[");
                        StringBuffer append = listTojson(buffer, list).append("]");
                        buffer.append(append);
                    }
                    else if(simpleName.equals("HashSet")||simpleName.equals("TreeSet")){

                        buffer.append("\""+field.getName()+"\":[");
                        Set<Object> sets = (Set<Object>) object;
                        buffer = setTojson(sets, buffer).append("]");
                    }
                    else if(simpleName.equals("HashMap")||simpleName.equals("HashTable")){

                        buffer.append("\""+field.getName()+"\":");
                        StringBuffer mapbuffer = new StringBuffer(mapTojson(object));
                        mapbuffer.deleteCharAt(0);
                        buffer.append(mapbuffer);
                    }
                    else{
                        buffer = beanTojson(object,buffer).append(",");

                    }
                }

            }

            buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
            buffer.append("},");
        }

      }

     buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
     return buffer.toString()+"}]";
}

/**
 * @描述 将不是基本类型的字段转为json格式
 * @param obj
 * @param buffer
 * @return
 * @throws IllegalArgumentException
 * @throws IllegalAccessException
 */
private static StringBuffer beanTojson(Object obj,StringBuffer buffer) throws IllegalArgumentException, IllegalAccessException{

    Class<? extends Object> clazz = obj.getClass();
    Field[] declaredFields = clazz.getDeclaredFields();
    Field.setAccessible(declaredFields, true);

    buffer.append("\""+clazz.getSimpleName()+"\":{");

    for (Field field : declaredFields) {

        Object object = field.get(obj);
        String fieldName = field.getType().getSimpleName();

        if(object == null){
            if(fieldName.equals("String"))
            {
                buffer.append("\""+field.getName()+"\":\"\",");
            }

            else{
                buffer.append("\""+field.getName()+"\":null,");
            }

        }
        else{

        Class<? extends Object> fieldclass = object.getClass();
        String simpleName = fieldclass.getSimpleName();

        if(simpleName.equals("String")){

            buffer.append("\""+field.getName()+"\":\""+field.get(obj)+"\",");
        }
        else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

            buffer.append("\""+field.getName()+"\":"+field.get(obj)+",");
        }
        else if(simpleName.equals("Date")){

            Date date = (Date) object;
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            String simdate = simpleDateFormat.format(date);
            buffer.append("\""+field.getName()+"\":\""+simdate+"\",");
        }
        else if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList")){

            List<Object> list = (List<Object>) object;
            buffer = listTojson(buffer, list);
        }
        else if(simpleName.equals("HashSet")||simpleName.equals("TreeSet")){

            Set<Object> set = (Set<Object>) object;
            buffer = setTojson(set, buffer);
        }
        else if(simpleName.equals("HashMap")||simpleName.equals("HashTable")){

            buffer.append("\""+field.getName()+"\":");
            StringBuffer mapbuffer = new StringBuffer(mapTojson(object));
            mapbuffer.deleteCharAt(0);
            buffer.append(mapbuffer);
        }
        else{
                buffer = beanTojson(object,buffer).append("}");
            }
        }

    }

    buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
    buffer.append("}");

    return buffer;
}

/**
 * @描述 将list数组转为json格式
 * @param buffer
 * @param list
 * @return
 * @throws IllegalArgumentException
 * @throws IllegalAccessException
 */
private static StringBuffer listTojson(StringBuffer buffer,List list) throws IllegalArgumentException, IllegalAccessException{

//遍历传过来的list数组
for (Object object : list) {

    //判断遍历出的值是否为空
    if (object == null) {
        buffer.append(","); 
    }
    else{

        Class<? extends Object> class1 = object.getClass();
        String simpleName = class1.getSimpleName();

        if(simpleName.equals("String")){

            buffer.append("\""+object.toString()+"\",");
        }
        else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

            buffer.append(""+object.toString()+",");
        }
        else if(simpleName.equals("Date")){
            Date date = (Date) object;
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            String simdate = simpleDateFormat.format(date);
            buffer.append(""+simdate+",");
        }
        else{

            Class<? extends Object> class2 = object.getClass();
            Field[] fields = class2.getDeclaredFields();
            Field.setAccessible(fields, true);
            buffer.append("{");
            //遍历对象中的所有字段获取字段值和字段名称拼成json字符串
            for (Field field : fields) {

                Object fieldobj = field.get(object);
                String fieldName = field.getType().getSimpleName();

                if(fieldobj == null){

                    if(fieldName.equals("String"))
                    {
                        buffer.append("\""+field.getName()+"\":\"\",");
                    }

                    else{
                        buffer.append("\""+field.getName()+"\":null,");
                    }

                }

                else{

                    String fsimpleName = fieldobj.getClass().getSimpleName();

                    if(fsimpleName.equals("String")){

                        buffer.append("\""+field.getName()+"\":\""+field.get(object)+"\",");
                    }
                    else if(fsimpleName.equals("Boolean")||fsimpleName.equals("Integer")||fsimpleName.equals("Double")||fsimpleName.equals("Float")||fsimpleName.equals("Long")){

                        buffer.append("\""+field.getName()+"\":"+field.get(object)+",");
                    }
                    else if(fsimpleName.equals("Date")){

                        Date date = (Date) object;
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                        String simdate = simpleDateFormat.format(date);
                        buffer.append("\""+field.getName()+"\":"+simdate+",");
                    }
                    else{

                        buffer = beanTojson(fieldobj, buffer).append(",");
                    }
                }

            }

            buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
            buffer.append("},");
        }
        }

    }

    buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
    buffer.append("]");

    return buffer;
}



/**
 * @描述 将set数组转为json格式
 * @param set
 * @param buffer
 * @return
 * @throws IllegalArgumentException
 * @throws IllegalAccessException
 */
private static StringBuffer setTojson(Set set,StringBuffer buffer) throws IllegalArgumentException, IllegalAccessException{

    for (Object object : set) {
        if (object == null) {
            buffer.append(""+"null"+",");   
        }
        else{

            Class<? extends Object> class1 = object.getClass();

            //判断集合中的值是否为java基本类型
            String simpleName = class1.getSimpleName();
            if(simpleName.equals("String")){

                buffer.append("\""+object.toString()+"\",");
            }
            else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

                buffer.append(""+object.toString()+",");
            }
            else if(simpleName.equals("Date")){

                Date date = (Date) object;
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                String simdate = simpleDateFormat.format(date);
                buffer.append(""+simdate+",");
            }
            else{

                Class<? extends Object> class2 = object.getClass();
                Field[] fields = class2.getDeclaredFields();
                Field.setAccessible(fields, true);
                buffer.append("{");

                //遍历对象中的所有字段获取字段值和字段名称拼成json字符串
                for (Field field : fields) {

                    Object fieldobj = field.get(object);
                    String fieldName = field.getType().getSimpleName();

                    if(object == null){
                        if(fieldName.equals("String"))
                        {
                            buffer.append("\""+field.getName()+"\":\"\",");
                        }

                        else{
                            buffer.append("\""+field.getName()+"\":null,");
                        }

                    }
                    else{

                        String fsimpleName = fieldobj.getClass().getSimpleName();
                        if(fsimpleName.equals("String")){

                            buffer.append("\""+field.getName()+"\":\""+field.get(object)+"\",");
                        }
                        else if(fsimpleName.equals("Boolean")||fsimpleName.equals("Integer")||fsimpleName.equals("Double")||fsimpleName.equals("Float")||fsimpleName.equals("Long")){

                            buffer.append("\""+field.getName()+"\":"+field.get(object)+",");
                        }
                        else if(fsimpleName.equals("Date")){

                            Date date = (Date) object;
                            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                            String simdate = simpleDateFormat.format(date);
                            buffer.append("\""+field.getName()+"\":"+simdate+",");
                        }
                        else{

                            buffer = beanTojson(fieldobj, buffer).append(",");
                        }
                    }   
                }

                buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
                buffer.append("},");
            }
        }
    }

    buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
    return buffer;
}

}s

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值