利用反射实现对象转json格式字符串

一、序言
             JSON 数据的书写格式是:名称/值,因为json具有鲜明的格式,我们常用它来作为数据传输载体。我们在项目中经常会把从数据库得到的数据转成json格式传到前台,接收后进行解析,下面这个是我写的一个工具类,利用反射将对象中的属性,值 并转为json格式。
二、实现背景
            在项目代码进行编写时,会经常使用json格式的数据进行数据传递,但是使用jsonArray的话都需要再重新转成string类型,如果需要大量的json数据的话会造成大量的资源浪费,因此编写了一个直接转换成string类型的json工具类。
三、实现方式
/**
	 * @描述 将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;
	}
 
        /**
	 * @描述 将集合转为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字符串的样式,。
后面带有jar包以及源码,求大神指点 大笑
 

猜你喜欢

转载自admin-king.iteye.com/blog/2309271
今日推荐