实体转json串。能满足普通list的转换。。及一些些简单的对象.对象.属性的转换《还未完善--对象.集合》

原创 2013年12月03日 21:01:19
/**
	 * list转json
	 * @param list	需要转换的list
	 * @param map	转换哪些字段  (aaa%%bbb%%ccc,"aaa")  字段名,json键名      
	 * @param dateFormat   格式化的日期类型
	 * @return
	 */
	public static String listToJson(List list,Map<String,String>map,DateFormat dateFormat){
		List<String>methodNamea = new ArrayList<String>();
		List<String>methodNameb = new ArrayList<String>();
		Iterator it = map.entrySet().iterator();  
        while (it.hasNext()) {  
            Map.Entry e = (Map.Entry) it.next();  
            if(e.getKey().toString().indexOf("%%")==-1){
            	methodNamea.add(e.getKey().toString());
            }else{
            	methodNameb.add(e.getKey().toString());
            }
        }  
        StringBuilder sb = new StringBuilder();
	    try{
	    	String oneData="";
			String methodName = "";
			String attr="";
			String methodNames="";
			Method[] methods=null;
			for(int q=0;q<list.size();q++){
				sb.append("{");	
				Object obj = list.get(q);
				methods = obj.getClass().getMethods();
				//先把单个字段的转换json
				for(int i=0;i<methodNamea.size();i++){
					methodName="get"+methodNamea.get(i);
					attr=methodNamea.get(i);
					for(int k=0;k<methods.length;k++){
						Method m = methods[k];
						if(m.getName().toLowerCase().equals(methodName.toLowerCase())){
							 Object t = m.invoke(obj,null);
							 if(map.get(attr)==null){
								 sb.append("'"+attr+"':");
							 }else{
								 sb.append("'"+map.get(attr)+"':");
							 }
							 sb.append("'"+t.toString()+"',");
							 break;
						}
					}
				}
				//非单个字段转换JSON
				for(int i=0;i<methodNameb.size();i++){
					methodNames= methodNameb.get(i);
					String[]tempNames = methodNames.split("%%");
					Object objjk = null;
					boolean sunObjIsNull=false;
					for(int k=0;k<tempNames.length;k++){
						methodName="get"+tempNames[k];
						attr=tempNames[k];
						if(objjk!=null){
							methods=objjk.getClass().getMethods();
						}else{
							if(sunObjIsNull){	
								if(map.get(methodNames)==null){
									 sb.append("'"+methodNames+"':");
								 }else{
									 sb.append("'"+map.get(methodNames)+"':");
								 }
								 sb.append("'',");
								 break;
							}
						}
						if(q==4&&i==1){
							int qq=0;
						}
						for(int j=0;j<methods.length;j++){
							Method m = methods[j];
							if(m.getName().toLowerCase().equals(methodName.toLowerCase())){
								Class returnClass = m.getReturnType();
								if(returnClass.getCanonicalName().indexOf("java.")!=-1){
									 if(map.get(methodNames)==null){
										 sb.append("'"+methodNames+"':");
									 }else{
										 sb.append("'"+map.get(methodNames)+"':");
									 }
									 Object t = m.invoke(objjk,null);
									 if(t instanceof Date){
										sb.append("'"+dateFormat.format((Date)t)+"',");
									 }else if(t instanceof Timestamp){
										 Timestamp ts = (Timestamp)t;
										 sb.append("'"+dateFormat.format(new Date(ts.getTime()))+"',");
									 }else if(t==null){
										 sb.append("'',");
									 }else{
										 sb.append("'"+t.toString()+"',");
									 }
								}else{	
									if(objjk==null){
										objjk = m.invoke(obj,null);
										if(objjk==null){
											sunObjIsNull=true;
										}
									}else{
										objjk = m.invoke(objjk,null);
									}
								}
								break;
							}
						}
					}
					methods = obj.getClass().getMethods();
				}
				oneData= sb.substring(0,sb.length()-1);
				sb.delete(0,sb.length());
				sb.append(oneData);
				sb.append("},");	
			}
			oneData=null;
			methodName = null;
			attr=null;
			methodNames=null;
			methods=null;
		}catch(Exception ee){
			ee.printStackTrace();
		}
		return sb.substring(0,sb.length()-1);
	}


上面是代码。。。

Map<String,String>map = new HashMap<String,String>(); //map  两个参数  第一个是字段名   第二个是转成json后的键   如果第2个参数为null  则默认一字段名为 json的键
// map.put("id",null);
// map.put("name",null);
// map.put("money",null);
// map.put("brand%%brandAddress","brandAddress");
// map.put("brandnewtype%%content","content");
// map.put("journal%%magtype%%name","magtypeName");

这个是传入的map对象。

map.put("journal%%magtype%%name","magtypeName");

这个就是list里面一个对象a    需要对象a的journal字段的magtype的字段的name属性。。。。(键)。。。值。。。就是转成json后的键名称



本人新手一枚。。。对于怎么优化也不知道啊。。懵懂的设了几个null。。。

写这个目的是因为hibernate实体关系配了很多,。。用json-lib.jar这个包转json的话会转了很多没用的属性。还有就是关联关系  死循环问题。。。这需要把几个set的属性过滤。。。。总之觉得很麻烦。。。

然后写了这个,。对比了和json-lib的性能。。。少量数据下速度是比json-lib快很多的。(2500个简单类型左右)。。    。。。

数据量大又会造成内存溢出。。。。。。。。。。。。



希望碰巧看过的大神优化优化。。。。我也看了下json-lib的原码。。。看懵了。。由此可见。。自身还是很菜,。,,

上面注释少。。。因为写的很乱。。就去掉了。。


使用JackSon将对象和集合转为Json

使用JackSon将对象和集合转为Json首先三个jar demopackage com.xieth.test;import java.util.Arrays; import java.util.L...
  • ACM_TH
  • ACM_TH
  • 2016年10月02日 14:02
  • 1587

实体嵌套集合转Json

今天在做项目的过程中出现的一个问题,在项目中转换一个List实体集合,此集合中一个属性为另外一个实体的Set集合。在转换的过程中出现了Json转换死循环的错误。 找了一天找到了两个解决方案! 第一...
  • lypf19900912
  • lypf19900912
  • 2014年12月30日 21:58
  • 1725

Java中Json字符串直接转换为对象(包括多层List集合)

使用到的类:net.sf.json.JSONObject  下面是例子代码: // JSON转换 JSONObject jsonObj = JSONObject.fromObject(j...
  • catoop
  • catoop
  • 2015年01月15日 18:25
  • 41103

实体对象转化为json字符串

之前遇到过的一个问题就是前段请求后台,需要返回一个json格式的字符串,但是我们通常查询返回的是一个实体对象,所以需要将实体对象进行转化,转成json类型的字符串 网上的一种做法是通过反射的方式将实...
  • rookie_s
  • rookie_s
  • 2017年02月04日 14:35
  • 1741

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

package test; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Da...
  • yaoxiaoganggang
  • yaoxiaoganggang
  • 2016年06月17日 17:22
  • 1322

利用Reflection反射将对象转化为 List和Model

public class ReflectionConvertHelper { public static List ConvertToList(DataTable dt) ...
  • yfz19890410
  • yfz19890410
  • 2016年08月03日 14:30
  • 626

实体类和JSON对象之间相互转化

1. [代码]工具类     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...
  • hanshangzhi
  • hanshangzhi
  • 2017年07月27日 21:02
  • 812

json:实体类和JSON对象之间相互转化

在需要用到JSON对象封装数据的时候,往往会写很多代码,也有很多复制粘贴,为了用POJO的思想我们可以装JSON转化为实体对象进行操作 1. [代码]工具类      ? 1 2 ...
  • taoshengyijiuzt
  • taoshengyijiuzt
  • 2016年01月17日 23:54
  • 1712

JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中

处理JSON字符串时,一直出错,写个例子后发现原来是没有弄清楚数据的格式问题。 实现的是 JSONString 转换成java对象 或是 list列表 实例类 News packag...
  • u013147600
  • u013147600
  • 2015年08月10日 16:15
  • 5635

map、list、 数组、 对象 和 json的互转

如果要将数组、对象、Map、List转换成JSON数据,那我们需要一些jar包:json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar commons-logging.j...
  • LONG729564606
  • LONG729564606
  • 2016年09月11日 16:54
  • 1870
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实体转json串。能满足普通list的转换。。及一些些简单的对象.对象.属性的转换《还未完善--对象.集合》
举报原因:
原因补充:

(最多只允许输入30个字)