自己项目中用到的obj 转hashMap

需求背景:项目中原来是通过fastJson 进行转换的,但是这个方法在vivo51上会卡死手机,最后导致OOM。 没办法只能根据项目自己进行封装。
实现思路:遍历对象属性,进行拼接,普通(String,int,booble等)直接放到HashMap中,List拼接成json串,作为value放到HashMap中.只有第一层的才会放到hashMap中,其他都拼接为json串。
核心方法

Field[] declaredField= obj.getClass().getDeclaredFields();
for(int i=0;i

具体实现代码 只测试了两层 及: 带一层list的数据提交,未测 list中有list的情况

 /**
     * 将对象转为Map
     *
     * @return
     */
    public static HashMap covertObj2Map(Object obj) {
        HashMap hashMap = new HashMap<>();
        try {
            /*获取所u 声明字段*/
            Field[] declaredFields = obj.getClass().getDeclaredFields();
            for (int i = 0; i < declaredFields.length; i++) {
                Field declaredField = declaredFields[i];
                /*可获取值,不加这个可能获取不到值*/
                declaredField.setAccessible(true);
                String name = declaredField.getName();
                /*获取字段对应的值*/
                Object value = declaredField.get(obj);
                if (value != null) {
                    String typeName = declaredField.getGenericType().toString();
                    /*如果是List, 其他统一处理*/
                    if (typeName.contains("java.util.List")) {
                        List list = (List) value;
                        hashMap.put(name, getJSonStr(list));
                    } else {
                        hashMap.put(name, String.valueOf(value));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return hashMap;
    }

    /**
     * 拼接 list 中的数据为jsonStr
     */
    private static String getJSonStr(List list) throws IllegalAccessException {
        StringBuilder sb = new StringBuilder("[");

        for (int i = 0; i < list.size(); i++) {
            Object item = list.get(i);
            if (item instanceof List) {
                sb.append(getJSonStr(list));
            } else {
                Field[] declaredFields = item.getClass().getDeclaredFields();
                sb.append("{");
                for (int m = 0; m < declaredFields.length; m++) {
                    Field declaredField = declaredFields[m];
                    declaredField.setAccessible(true);
                    String name = declaredField.getName();
                    Object value = declaredField.get(item);
                    if (value != null) {
                        String typeName = declaredField.getGenericType().toString();
                        if (typeName.contains("java.util.List")) {
                            sb.append(getJSonStr((List) value));
                        } else {
                            sb.append(name).append(":").append(value);
                            if (m < declaredFields.length - 1) {
                                sb.append(",");
                            }
                        }
                    }
                }
                sb.append("}");

                if (i < list.size() - 1) {
                    sb.append(",");
                }
            }
        }
        sb.append("]");
        return sb.toString();
    }

你可能感兴趣的:(自己项目中用到的obj 转hashMap)