`
Admin_king
  • 浏览: 4612 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用反射实现对象转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包以及源码,求大神指点大笑
 
分享到:
评论

相关推荐

    C语言实现的 json格式字符串与结构体自动相互转化

    标题 "C语言实现的 json格式字符串与结构体自动相互转化" 涉及到的核心知识点是C语言编程、JSON解析和结构体操作。C语言是一种底层编程语言,通常用于系统编程、嵌入式开发等领域,而JSON(JavaScript Object ...

    利用java反射将json字符串转成对象.zip

    在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON字符串转换为Java对象。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...

    利用Google Gson实现JSON字符串和对象之间相互转换

    `toJson()`方法接受一个Java对象,并将其转换为JSON格式的字符串。 ### 自定义序列化与反序列化 有时,JSON结构可能与Java对象不完全匹配,这时可以自定义序列化和反序列化的逻辑。Gson提供了`@JsonAdapter`注解...

    java反射实现javabean转json实例代码.docx

    本文将详细介绍如何利用Java反射机制来实现JavaBean对象到JSON字符串的转换,并提供具体的示例代码。 #### 二、Java反射机制简介 Java反射机制允许程序在运行时访问类的信息,包括字段、构造函数以及方法等。通过...

    Jackson实现Object对象与Json字符串的互转

    本文将深入探讨如何利用Jackson库实现Java对象与JSON字符串的互转,同时也会涉及一些源码解析和实际应用中的技巧。 Jackson库由 FasterXML 组织开发,它的核心组件包括`Jackson-databind`,`Jackson-core`和`...

    Java反射函数机制实现List转换Json

    本话题将深入探讨如何利用Java反射机制将List对象转换为JSON格式。 在Java中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在处理数据传输或存储...

    基于反射机制实现Java对象向Json数据的转换.pdf

    JSON格式的数据结构简单明了,主要分为对象、数组、字符串、数字、布尔值以及特殊值null。这些元素构成了JSON的基础,使得不同语言间的数据交换变得简单。 在Java中,对象到JSON的转换需求几乎无所不在。无论是将...

    List对象列表 转换Json

    - `OneObjectToJson`方法将单个对象转换为JSON格式的字符串。 - `toJson`方法接收一个`List&lt;object&gt;`,将其转换为JSON数组。首先,确定数组的类型名称(即`Class1`的类型名),然后遍历`List&lt;object&gt;`中的每个对象...

    c++反射 类序列化为json

    通过RTTR,我们可以获取类的成员变量、方法、构造函数和属性,甚至可以创建和销毁对象实例,这对于实现序列化和反序列化非常有用,特别是将C++的对象转换为JSON格式。 JSON(JavaScript Object Notation)是一种轻...

    为了高效地将Json对象转化成Java bean对象,传统上我们是在运行是利用反射来实现.zip

    我们可以使用诸如Jackson、Gson、Fastjson等流行的JSON库来解析这个字符串,将其转化为JSON对象。 2. **获取Java Bean类信息**:利用反射API,通过`Class.forName()`方法获取Java Bean类的Class对象。这需要知道...

    自定义方法实现msp和json互转(底层实现原理,绝对值)

    在Java中,我们可以利用反射API来实现这个过程。 1. **反序列化**:将JSON字符串转换为Map。这个过程通常涉及到解析JSON字符串,然后根据JSON结构创建对应的Map。使用反射,我们可以动态地创建和设置类的属性,这在...

    java反射实现javabean转json实例代码

    通过上述知识点的解析,我们可以看到,Java反射机制不仅在编写框架或库时非常重要,它同样可以用于日常的开发任务中,比如在需要将Java对象转化为JSON格式进行数据交换的场景。文档中给出的实例代码展示了如何利用...

    Json处理工具类

    ### Json处理工具类知识点 #### 一、简介 在Java编程中,经常需要对JSON数据进行解析、构建或...此外,还介绍了如何利用`Gson`库将Java对象序列化为JSON字符串。这对于处理Web服务返回的数据或构建HTTP请求非常有用。

    json与java对象互转

    在实际操作中,我们可以通过以下方式创建Gson实例,并利用它来将Java对象转换为JSON字符串: ```java Gson gson = new GsonBuilder() .registerTypeAdapter(java.sql.Date.class, new SQLDateSerializer()) ....

    json 转化工具类

    - **Java对象转JSON字符串**:将Java对象转化为JSON格式的字符串,以便于在网络间传输或存储。 - **集合和数组转化**:支持List、Set、Array等集合类型的转化。 - **Map转化**:可以将Map对象转化为JSON对象,反之...

    Json序列化类,小而轻的帮助类

    3. 遍历列表中的每一个元素,利用反射获取元素的所有属性,并将它们转换为JSON格式。 4. 将所有元素封装在一个JSON数组中,并返回完整的JSON字符串。 #### 六、总结 综上所述,`DataSerialHelper`类提供了一组实用...

    json 数据解析包

    - 序列化Java对象:将Java对象转换为JSON格式的字符串,以便在网络上传输或保存到文件中。 - 转换数据类型:在JSON数据与Java对象之间进行数据类型的转换,例如将JSON字符串转为整数或日期。 - 遍历和操作JSON结构:...

    拷贝JSON对象值进Java Bean对象

    JSON对象由键值对组成,键是字符串,值可以是各种数据类型,包括字符串、数字、数组、对象等。在Java中,我们通常使用`org.json`库或`com.google.gson`库来解析和创建JSON对象。 以`org.json`库为例,我们可以使用`...

Global site tag (gtag.js) - Google Analytics