`
shihuan830619
  • 浏览: 582802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • J2SE
阅读更多
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.math.BigDecimal;

import org.apache.commons.lang.StringUtils;

//import org.json.JSONArray;
//import org.json.JSONObject;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JSONArray;

import com.zznode.inms.broadbank.admin.dto.TbPingtaskResultDto;

public class ListDtoToJson {
	
	/**Java反射函数机制 List转换Json,返回[{"name":"value"},{"shihuan":"yushibo"},{...}]格式的String字符串*/ 
    public static String getJsonData(List list) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
//    	String jsonTemp = "{results:[";
    	String jsonTemp = "[";
    	for(int i=0; i<list.size(); i++){
    		jsonTemp = jsonTemp+"{";
    		Field[] field = list.get(i).getClass().getDeclaredFields();  //获取参数数组
    		for (int j=0; j<field.length; j++) {
    			Method metd = list.get(i).getClass().getMethod("get"+field[j].getName().substring(0,1).toUpperCase()+field[j].getName().substring(1),null);  //根据字段名找到对应的get方法,null表示查找的方法无参数 
//    			jsonTemp = jsonTemp+field[j].getName()+":'"+metd.invoke(list.get(i),null)+"'";  //调用找到的函数 
    			jsonTemp = jsonTemp+"\""+field[j].getName()+"\":\""+metd.invoke(list.get(i),null)+"\"";  //调用找到的函数
    			if(j != field.length-1){
    				jsonTemp = jsonTemp+",";
    			}
    		}
    		if(i != list.size()-1){
    			jsonTemp = jsonTemp+"},";
    		}else{
    			jsonTemp = jsonTemp+"}";
    		}
    	}
//    	jsonTemp = jsonTemp+"]}";
    	jsonTemp = jsonTemp+"]";
    	return jsonTemp;
    }

    /**Java反射函数机制 List转换Json,返回[{"name":"value"};{"shihuan":"yushibo"};{...}]格式的String字符串*/ 
    public static String getJsonDataBaseList(List list) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
//    	String jsonTemp = "{results:[";
    	String jsonTemp = "";
    	for(int i=0; i<list.size(); i++){
    		jsonTemp = jsonTemp+"{";
    		Field[] field = list.get(i).getClass().getDeclaredFields();  //获取参数数组
    		for (int j=0; j<field.length; j++) {
    			Method metd = list.get(i).getClass().getMethod("get"+field[j].getName().substring(0,1).toUpperCase()+field[j].getName().substring(1),null);  //根据字段名找到对应的get方法,null表示查找的方法无参数 
//    			jsonTemp = jsonTemp+field[j].getName()+":'"+metd.invoke(list.get(i),null)+"'";  //调用找到的函数 
//    			jsonTemp = jsonTemp+"\""+field[j].getName()+"\":\""+metd.invoke(list.get(i),null)+"\"";  //调用找到的函数

    			if("java.math.BigDecimal".equals(field[j].getType().getName()) && metd.invoke(list.get(i), null).toString().indexOf(".") != -1){
    					double doubleTypeData = getDoubleTypeData(metd.invoke(list.get(i), null).toString());
        				jsonTemp = jsonTemp+field[j].getName()+":"+doubleTypeData;  //调用找到的函数
    			}else if("java.lang.String".equals(field[j].getType().getName())){
    				if(!"".equals(nullToString(metd.invoke(list.get(i), null))))
    					jsonTemp = jsonTemp+field[j].getName()+":'"+metd.invoke(list.get(i), null)+"'";  //调用找到的函数
    			}else{
    				if(!"".equals(nullToString(metd.invoke(list.get(i), null))))
    					jsonTemp = jsonTemp+field[j].getName()+":"+metd.invoke(list.get(i), null);  //调用找到的函数
    			}
    			
    			if(j != field.length-1){
    				if(!"".equals(nullToString(metd.invoke(list.get(i), null))))
    					jsonTemp = jsonTemp+",";
    			}
    		}
    		if(i != list.size()-1){
    			jsonTemp = jsonTemp+"};";
    		}else{
    			jsonTemp = jsonTemp+"}";
    		}
    	}
//    	jsonTemp = jsonTemp+"]}";
    	jsonTemp = jsonTemp+"";
    	return jsonTemp;
    }
    
    /**将Json格式的String字符串拼装成List对象
     * @throws InvocationTargetException 
     * @throws NoSuchMethodException 
     * @throws IllegalAccessException */
    public static List getListJson(List list) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    	List jsonlist = new ArrayList();
    	String jsonStrBaseList = getJsonDataBaseList(list);
    	String[] jsonStr = jsonStrBaseList.split(";");
    	int len = jsonStr.length;
    	for(int i=0; i<len; i++){
    		jsonlist.add((Object)jsonStr[i]);
    	}
    	return jsonlist;
    }
    
    public static double getDoubleTypeData(String param) {
    	DecimalFormat df = new DecimalFormat("#.00");  //.后面0的个数为小数位数
		BigDecimal bdStr = new BigDecimal(param);
		bdStr = bdStr.setScale(2, BigDecimal.ROUND_UP);
		double bdStrz = bdStr.doubleValue();
		String dfStr = df.format(bdStrz);
		return bdStrz;
    }
    
    public static String nullToString(Object val) {
		if (val == null) {
			val = "";
		}
		return val.toString();
	}
分享到:
评论

相关推荐

    java反射机制学习笔记+反射机制实操案例

    总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...

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

    传统的做法是利用Java的反射API(Reflection API)来实现这种转换。反射允许我们在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。以下是一个简化的转换过程: 1. **解析JSON...

    json-jar包

    JSON Lib提供了将Java集合(如List、Map)、JavaBeans、XML等转换为JSON对象的方法,同时也能够将JSON对象解析回这些数据结构。这个库是JSON-JAR包的核心,它的功能涵盖了JSON的序列化和反序列化,使得在Java应用中...

    json-lib-2.4及其依赖包.zip

    这些依赖包可能包括了对XML、日期时间处理、反射机制等支持,因为JSON-Lib在进行对象与JSON之间的转换时,可能会用到这些功能。 在Java开发中,使用Maven或Gradle等构建工具时,可以直接将JSON-Lib作为一个依赖项...

    json_lib jar包

    这个jar包包含了所有必要的类和方法,使得在Java应用中解析、生成、操作和转换JSON数据变得非常简单。 `json_lib`库的主要特点包括: 1. **高性能**:`json_lib`设计时考虑了性能,它能够快速地将Java对象转换为...

    JSON入门教程

    可以通过反射或其他JSON库的方法将JavaBean转换为JSON,以便进行网络传输。前端同样通过`jQuery.parseJSON`解析并访问数据。 总结一下,JSON是Web服务和客户端之间交换数据的常见格式,它的简单性和JavaScript的...

    解析json数据

    Gson通过反射机制来将Java对象映射到JSON表示,反之亦然。当我们有一个实体类,Gson会尝试将JSON字符串中的键与实体类的属性对应。如果JSON中的键是字符串类型,且与实体类的字段名匹配,那么Gson就能正确地将数据...

    ajax+json+Struts2实现list传递实例讲解

    本文详细讲解了如何使用Ajax、JSON和Struts2框架实现从后端获取List集合数据并展示在前端页面的实例。以下知识点是基于本文内容展开的详细解读。 知识点一:Ajax技术 Ajax(Asynchronous JavaScript and XML,异步...

    javaapi开发大全

    2. **集合框架**:Java集合框架是`java.util`包的核心部分,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)等接口和实现类。这些接口和类提供了数据存储和操作的各种...

    220个JAVA初学者实例

    11. **反射机制**:通过反射可以动态访问类的信息,创建对象,调用方法,改变字段值。 12. **集合框架**:深入理解List、Set、Queue等接口,以及它们的实现类,例如ArrayList、LinkedList、TreeSet、PriorityQueue...

    java实用100例 60-100

    77.JSON处理:示例可能涵盖使用Gson或Jackson库将Java对象转换为JSON字符串,以及反序列化回Java对象。 78.XML处理:DOM、SAX和StaX API可用于解析和生成XML文档,示例可能涵盖这些API的使用。 79.图形绘制:Java...

    java lib库部分2

    5. **反射**:java.lang.reflect包提供了反射机制,允许程序在运行时检查和操作类、接口、方法和构造器等,增强了代码的灵活性和动态性。 6. **Apache Commons**:这是一个由Apache软件基金会开发的开源库,包含了...

    java常用框架学习笔记

    前者基于Java的反射机制,后者则基于字节码增强技术。 #### Spring2.x Spring 2.x版本引入了许多新特性,比如改进的AOP支持、增强的声明式事务管理等。 #### Annotation(Spring高版本) 随着Spring的发展,注解...

    java 实例编程百例

    2. **面向对象**:Java是一种面向对象的语言,实例中可能会讲解类的创建、对象的实例化、封装、继承、多态等概念,以及如何通过构造函数、方法重载和覆盖来实现对象的生命周期管理。 3. **异常处理**:Java中的try-...

    开发笔记API.md

    这里使用了`JSONObject`类来进行序列化和反序列化操作,其中`JSONObject.toJSONString(paramMap)`将Map转换为JSON字符串,然后`JSONObject.parseObject(jsonString, cls)`将JSON字符串转换为指定类型的Java对象。...

    164个完整的Java 代码

    11. **反射机制**:Java的反射API可以动态获取类的信息并操作类的对象,这对于理解和实现插件化或元编程很有帮助。 12. **泛型**:泛型提供了一种在编译时检查类型安全并减少类型转换错误的方式,同时提高代码的...

    2018JAVA最新框架面试题

    可以通过 JackSon 框架把 Java 对象直接转换成 js 可识别的 json 对象。 8. SpringMvc 的工作流程图? SpringMvc 的工作流程图可以分为四个步骤:客户端请求、SpringMvc 处理、业务逻辑处理、视图渲染。 9. ...

    JAVA 208道面试题.pdf

    Java反射机制允许程序在运行时访问和操作类、方法、接口等。通过反射,可以检查、修改和创建类的行为。常见的反射类包括Class、Field、Method、Constructor等。 ### 对象拷贝 对象拷贝涉及浅拷贝和深拷贝的概念。...

    Java开发实战1200例(第2卷).(配书光盘)

    4. **集合框架**:List、Set、Map接口及其实现类的使用,例如ArrayList、LinkedList、HashSet、HashMap等,这些在实际开发中频繁使用,实例将详细解释它们的工作原理和应用场景。 5. **IO流**:文件操作、网络通信...

Global site tag (gtag.js) - Google Analytics