美文网首页
自己项目中用到的obj 转hashMap

自己项目中用到的obj 转hashMap

作者: newszhu | 来源:发表于2020-04-14 14:26 被阅读0次

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

Field[] declaredField= obj.getClass().getDeclaredFields();
for(int i=0;i<declaredField.length;i++){
      Field field=declaredField[i];
      field.setAccessible(true);//设置可获取值
      String name =field.getName();//获取字段名称
      Object obj =field.get(obj);//获取字典对应的值 这个obj 对应传进来的 obj
     String typeName = field.getGenericType().toString();//获取值的类型
     if(type.equals("class java.lang.String")){ //如果type是类类型,则前面包含"class ",后面跟类名
          ...
        }
        if(type.equals("class java.lang.Integer")){
          ...
        }
        if(type.equals("class java.lang.Short")){
          ...
        }
        if(type.equals("class java.lang.Double")){
          ...
        }
        if(type.equals("class java.lang.Boolean")){
          ...
        }
        if(type.equals("class java.util.Date")){
          ...
        }

       if(type.contains("java.util.List")){//匹配List
          ...
        }
}

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

 /**
     * 将对象转为Map
     *
     * @return
     */
    public static HashMap<String, String> covertObj2Map(Object obj) {
        HashMap<String, String> 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

      本文链接:https://www.haomeiwen.com/subject/pczzmhtx.html