解决list转换json出现的各类问题 object转换为Map对象

         最近在写接口,要把list集合转换为json串返回。例如

         List<order> orders = orderService.findAll();

        JSONArray array = JSONArray.fromObject(orders);

       可能出现java.lang.StackOverflowError:该错误是由于当前线程的栈满了  ,也就是函数调用层级过多导致。在集合类型上无限的循环造成

        有时候会出现There is a cycle in the hierarchy这个异常是由于JSONObject插件内部会无限拆解你传入的对象,直到没有可拆解为止,问题就在这,如果你传入的对象有外键关系,或者相互引用,那么内部就会死循环,也就会抛出这个异常。

       我用的是mybatis,试了很多方法都不行,最后把对象都变成Map对象就不会出现错误了。

      下面是List集合转化为Map的方法。

     

package test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
public class ObjectToMap {

	/*
	 * 将object转换为Map,不包含object继承属性
	 */
	public static Map<String, String> getFieldVlaue(Object obj) throws Exception {  
        Map<String, String> mapValue = new HashMap<String, String>();  
        Class<?> cls = obj.getClass();  
        Field[] fields = cls.getDeclaredFields();  
        for (Field field : fields) {  
            String name = field.getName();  
            String strGet = "get" + name.substring(0, 1).toUpperCase() + name.substring(1, name.length());  
            Method methodGet = cls.getDeclaredMethod(strGet);  
            Object object = methodGet.invoke(obj);  
            String value = object != null ? object.toString() : "";  
            mapValue.put(name, value);  
        }  
        return mapValue;  
    }  
	/*
	 * 将List<object>转换为List<Map>
	 */
	public static List<Map> getFieldVlaueList(List<?> objects)throws Exception{
		
		List<Map> mapList = new ArrayList<Map>();
		for(Object obj:objects){
			mapList.add(getFieldVlaue(obj));
		}
		
		return mapList;
	}
	
	public static void main(String[] args) throws Exception {
		javaBean test = new javaBean();
		test.setPassword("1234");
		test.setUsername("admin");
		Map<String, String> mapList =getFieldVlaue(test);
		JSONArray array = JSONArray.fromObject(mapList);
		System.out.println(array.toString());
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值