关于JSONObject转实体和普通方法(通用)转实体

JSONObject转实体

JSONObject主要分为net.sf.json.JSONObject和com.alibaba.fastjson.JSONObject。
其实这两个JSONObject常用的功能都有,但是用法是不一样的。

JSON字符串使用net.JSONObject转实体主要用到的方法:

Student bean = (Student ) JSONObject.toBean(JSONObject.fromObject(o), Student .class);

JSON字符串使用fastjson转实体用的的方法:

 //JSON字符串转换成Java对象
Student student1 = JSONObject.parseObject(stuString, Student.class);

普通方法将JSON字符串转为java对象(通用)

只需要将下列代码直接复制到一个工具类中(我是复制到我的工具类Utils中),然后直接调用就可以转为想要的对象
例:
Student student= Utils.jsonToEntity(object, Student .class);
这是一个通用的方法。

	public static final char UNDERLINE_CHAR = '_';

	/**
     * 驼峰转下划线大写
     *
     * @param camelStr
     * @return
     * @Author xlq
     */
    public static String camelUnderline(String camelStr) {
        if (org.apache.commons.lang.StringUtils.isEmpty(camelStr)) {
            return org.apache.commons.lang.StringUtils.EMPTY;
        }
        int len = camelStr.length();
        StringBuilder strb = new StringBuilder(len + len >> 1);
        for (int i = 0; i < len; i++) {
            char c = camelStr.charAt(i);
            if (Character.isUpperCase(c)) {
                strb.append(UNDERLINE_CHAR);
                strb.append(Character.toLowerCase(c));
            } else {
                strb.append(c);
            }
        }
        return strb.toString().toUpperCase();
    }
	/**
     * 将JSON对象中的数据封装到JavaBean中,带下划线的key
     *
     * @param jsonObject
     * @param classType
     * @param <T>
     * @return
     * @throws Exception
     * @Author xlq
     */
    public static <T> T jsonToEntity(JSONObject jsonObject, Class<T> classType) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //采用反射机制创建对象
        T entity = classType.newInstance();
        //获取对象字节码信息,不要Object的属性
        BeanInfo beanInfo = Introspector.getBeanInfo(classType, Object.class);
        //获取entity对象中的所有属性
        PropertyDescriptor[] list = beanInfo.getPropertyDescriptors();
        Iterator keys = jsonObject.keys();
        while (keys.hasNext()) {
            String next = (String) keys.next();
            for (PropertyDescriptor pd : list) {
                //获取属性名
                String key = pd.getName();
                if (next.equalsIgnoreCase(key) || next.equalsIgnoreCase(camelUnderline(key)) || key.toLowerCase().equals(next.replace("_", "").toLowerCase())) {
                    //获取属性值
                    Class<?> propertyType = pd.getPropertyType();
                    if ("int".equals(propertyType.toString()) || "class java.lang.Integer".equals(propertyType.toString())) {
                        String string = jsonObject.getString(next);
                        if (!org.apache.commons.lang.StringUtils.isEmpty(string) && !"".equals(string)) {
                            Integer value = Integer.valueOf(string);
                            pd.getWriteMethod().invoke(entity, value);
                        }
                        break;
                    } else if ("class java.math.BigDecimal".equals(propertyType.toString())) {
                        String string = jsonObject.getString(next);
                        if (!org.apache.commons.lang.StringUtils.isEmpty(string) && !"".equals(string)) {
                            BigDecimal value = BigDecimal.valueOf(Double.parseDouble(string));
                            pd.getWriteMethod().invoke(entity, value);
                        }
                        break;
                    } else if ("class java.util.Date".equals(propertyType.toString())) {
                        String string = jsonObject.getString(next);
                        if (!org.apache.commons.lang.StringUtils.isEmpty(string) && !"".equals(string)) {
                            Date parse = sdf.parse(string);
                            pd.getWriteMethod().invoke(entity, parse);
                        }
                        break;
                    } else {
                        if (!"tmark".equalsIgnoreCase(next) && !"lg_lock".equalsIgnoreCase(next)) {
                            String value = jsonObject.getString(next);
                            pd.getWriteMethod().invoke(entity, value);
                            break;
                        }
                    }
                }
            }
        }
        return entity;
    }
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~~Whd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值