java开发之json工具类

在web开发或者有数据传送的地方,json总是必不可少,在java服务器端,定义一个“永久”的json工具类总是必不可少的,下面来发一个我自定义的json工具类。

程序实例:http://download.csdn.net/detail/writerpan/7288193

package com.writerpan.services.utils;

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * 自己封装的json工具类
 * @author Administrator
 *
 */
public class MyJson {
	
	/**  
     * 功能描述:传入任意一个 javabean 对象生成一个指定规格的字符串  
     *   
     * @param bean  
     *            bean对象  
     * @return String  
     */  
    public static String beanToJson(Object bean) {   
    	
    	
    	//如果是用户的userbase类,避免写出敏感的信息
    	if(bean.getClass().getName().equals("com.writerpan.data.bean.UserBase")){
    		return beanToJsonWithField(bean, new String[]{"name","username","sex","id","goal","commonFriends","city"});
    	}
        StringBuilder json = new StringBuilder();   //采用拼接字符串的方法
        json.append("{");   
        PropertyDescriptor[] props = null;   
        try {   
            props = Introspector.getBeanInfo(bean.getClass(), Object.class)   
                    .getPropertyDescriptors();   
        } catch (IntrospectionException e) {   
        }   
        if (props != null) {   
            for (int i = 0; i < props.length; i++) {   
                try {   
                    String name = props[i].getName();   
                    Object object=props[i].getReadMethod().invoke(bean);
                    String value=getJsonValue(object);
                    json.append("\"").append(name).append("\"").append(":").append(value).append(","); 
                } catch (Exception e) { 
                	e.printStackTrace();
                }   
            }   
            json.setCharAt(json.length() - 1, '}');   
        } else {   
            json.append("}");   
        }   
        return json.toString();   
    }   
  
    /**  
     * 功能描述:通过传入一个列表对象,调用指定方法将列表中的数据生成一个JSON规格指定字符串  
     *   
     * @param list  
     *            列表对象  
     * @return java.lang.String  
     */  
    public static String listToJson(List<?> list) {   
        StringBuilder json = new StringBuilder();   
        json.append("[");   
        if (list != null && list.size() > 0) {   
            for (Object obj : list) {   
                json.append(beanToJson(obj));   
                json.append(",");   
            }   
            json.setCharAt(json.length() - 1, ']');   
        } else {   
            json.append("]");   
        }   
        return json.toString();   
    }
    /**  
     * 功能描述:通过传入一个列表对象,调用指定方法将列表中的数据生成一个JSON规格指定字符串  
     *   
     * @param list  
     *            列表对象  
     * @return java.lang.String  
     */  
    public static String arrayToJson(Object[] objects) {   
    	StringBuilder json = new StringBuilder();   
    	json.append("[");   
    	if (objects != null && objects.length > 0) {   
    		for (Object obj : objects) {   
    			json.append(beanToJson(obj));   
    			json.append(",");   
    		}   
    		json.setCharAt(json.length() - 1, ']');   
    	} else {   
    		json.append("]");   
    	}   
    	return json.toString();   
    }
    /**  
     * 功能描述:传入任意一个 javabean 对象生成一个指定规格的字符串  
     *   
     * @param bean  
     *            bean对象  
     * @return String  
     */  
    public static String beanToJsonWithName(Object bean) {   
    	StringBuilder json = new StringBuilder();   
    	json.append("{");   
    	PropertyDescriptor[] props = null;   
    	try {   
    		props = Introspector.getBeanInfo(bean.getClass(), Object.class)   
    				.getPropertyDescriptors();   
    	} catch (IntrospectionException e) {   
    	}   
    	if (props != null) {   
    		for (int i = 0; i < props.length; i++) {   
    			try {   
    				String name = bean.getClass().getSimpleName();
    				//name在递归调用之后会连接上一段乱码,看似其存储地址,需要去掉
    				if(name.indexOf("$")>-1){
    					name = name.substring(0,name.indexOf("$"));
    				}
    				name += "."+props[i].getName();    
    				Object object=props[i].getReadMethod().invoke(bean);
    				String value=getJsonValue(object);
                    json.append("\"").append(name).append("\"").append(":").append(value).append(","); 
    				//json.append(",");   
    			} catch (Exception e) {   
    			}   
    		}   
    		json.setCharAt(json.length() - 1, '}');   
    	} else {   
    		json.append("}");   
    	}   
    	return json.toString();   
    }   
    
    /**  
     * 功能描述:通过传入一个列表对象,调用指定方法将列表中的数据生成一个JSON规格指定字符串  
     *   
     * @param list  
     *            列表对象  
     * @return java.lang.String  
     */  
    public static String listToJsonWithName(List<?> list) {   
    	StringBuilder json = new StringBuilder();   
    	json.append("[");   
    	if (list != null && list.size() > 0) {   
    		for (Object obj : list) {   
    			json.append(beanToJsonWithName(obj));   
    			json.append(",");   
    		}   
    		json.setCharAt(json.length() - 1, ']');   
    	} else {   
    		json.append("]");   
    	}   
    	return json.toString();   
    }
    
    
    /**
     * 只拼接需要的字段
     * @param list
     * @param fields
     * @return
     */
    public static String beanToJsonWithField(Object bean,String[] fields){
    	StringBuilder json = new StringBuilder();   
        json.append("{");   
        PropertyDescriptor[] props = null;   
        try {   
            props = Introspector.getBeanInfo(bean.getClass(), Object.class)   
                    .getPropertyDescriptors();   
        } catch (IntrospectionException e) {   
        }   
        if (props != null) {   
            for (int i = 0; i < props.length; i++) {   
                try {   
                    String name = props[i].getName();   
                	if(!isIn(fields,name)){
                		continue;
                	}
                    Object object=props[i].getReadMethod().invoke(bean);
                    String value=getJsonValue( object);
                    json.append("\"").append(name).append("\"").append(":").append(value).append(",");   
                } catch (Exception e) {   
                }   
            }   
            json.setCharAt(json.length() - 1, '}');   
        } else {   
            json.append("}");   
        }   
        return json.toString(); 
    }
    /**
     * 只拼接其他的字段
     * @param list
     * @param fields
     * @return
     */
    public static String beanToJsonWithoutField(Object bean,String[] fields){
    	StringBuilder json = new StringBuilder();   
    	json.append("{");   
    	PropertyDescriptor[] props = null;   
    	try {   
    		props = Introspector.getBeanInfo(bean.getClass(), Object.class)   
    		.getPropertyDescriptors();   
    	} catch (IntrospectionException e) {   
    	}   
    	if (props != null) {   
    		for (int i = 0; i < props.length; i++) {   
    			try {   
    				String name = props[i].getName();   
    				if(isIn(fields,name)){
    					continue;
    				}
    				Object object=props[i].getReadMethod().invoke(bean);
    				String value=getJsonValue( object);
    				json.append("\"").append(name).append("\"").append(":").append(value).append(",");   
    			} catch (Exception e) {   
    			}   
    		}   
    		json.setCharAt(json.length() - 1, '}');   
    	} else {   
    		json.append("}");   
    	}   
    	return json.toString(); 
    }
    
    public static boolean isIn(Object[] objs,Object obj){
    	for(Object object : objs){
    		if(object.equals(obj)) return true;
    	}
    	return false;
    }
    
    public static String getJsonValue(Object object){
    	String value = "";
    	if(object instanceof Date){
        	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        	value=sdf.format((Date)object);
        	if(value.substring(10).equals(" 00:00:00")){
        		value = value.substring(0,10);
        	}
        	value = "\""+value+"\"";
        }else if(object instanceof Integer){
        	value="\""+object+"\"";
        }else if(object instanceof Long){
        	value="\""+object+"\"";
        }else if(object instanceof String) {
        	value = (String)object;
        	//特殊字符处理
    		value = value.replaceAll("\"", "\'");
    		value = value.replaceAll("\n\r|\r|\n", "<br>");
        	value = "\""+ value + "\"";
        }else if(object instanceof Boolean) {
        	value = object.toString();
        }else if(object instanceof List<?>) {
        	value = listToJson((List<?>)object);
        }else if(object==null){
        	value = "\"\"";
        }else{
        	value = beanToJson(object);
        }
    	
    	return value;
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值