jsonStrig 带有下划线的对象转换成javabean

本文介绍了如何使用Java反射API处理带有下划线的字符串,如将'(买一送一)浅米灰(加绒加厚)情侣鞋'转换为驼峰命名,并展示了`setObjectField`方法在对象属性赋值中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.将某个string转化成对象,但是string是带有下划线:

[{"item_title": "(买一送一) 浅米灰(加绒加厚)情侣鞋", "item_cnt": 182, "item_unit_price": 10058.63, "item_all_price": 1830670, "item_id": 1, "rel_item_id": 3832160003872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 三元灰(四季款)情侣鞋", "item_cnt": 152, "item_unit_price": 9031.75, "item_all_price": 1372826, "item_id": 2, "rel_item_id": 3808692366872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 浅米灰(加绒加厚)情侣鞋", "item_cnt": 414, "item_unit_price": 9991.79, "item_all_price": 4136600, "item_id": 3, "rel_item_id": 3808731703872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 浅米灰(四季款)情侣鞋", "item_cnt": 118, "item_unit_price": 9032.37, "item_all_price": 1065820, "item_id": 4, "rel_item_id": 3832172770872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 浅米灰(加绒加厚)情侣鞋", "item_cnt": 180, "item_unit_price": 9990.0, "item_all_price": 1798200, "item_id": 5, "rel_item_id": 3793913909872, "source_type": 99, "rel_shop_id": 0},{"item_title": "断码运动鞋随机发", "item_cnt": 562, "item_unit_price": 1586.86, "item_all_price": 891814, "item_id": 6, "rel_item_id": 3793919215872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 碳灰黑(加绒加厚)情侣鞋", "item_cnt": 157, "item_unit_price": 9971.4, "item_all_price": 1565510, "item_id": 7, "rel_item_id": 3808699166872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 浅米灰(四季款)情侣鞋", "item_cnt": 205, "item_unit_price": 8999.76, "item_all_price": 1844950, "item_id": 8, "rel_item_id": 3808733683872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 深灰黑(四季款)情侣鞋", "item_cnt": 130, "item_unit_price": 8974.62, "item_all_price": 1166700, "item_id": 9, "rel_item_id": 3808702161872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 深灰黑(四季款)情侣鞋", "item_cnt": 130, "item_unit_price": 8974.62, "item_all_price": 1166700, "item_id": 10, "rel_item_id": 3808702161872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 深灰黑(四季款)情侣鞋", "item_cnt": 130, "item_unit_price": 8974.62, "item_all_price": 1166700, "item_id": 11, "rel_item_id": 3808702161872, "source_type": 99, "rel_shop_id": 0},{"item_title": "(买一送一) 深灰黑(四季款)情侣鞋", "item_cnt": 130, "item_unit_price": 8974.62, "item_all_price": 1166700, "item_id": 12, "rel_item_id": 3808702161872, "source_type": 99, "rel_shop_id": 0}]

2.工具类

 /**
     * 反射赋值
     */
    private static void setField(Field field, Object object, Object value) throws Exception {
        String fieldType = field.getGenericType().toString();
        log.info("fieldName:{}, fieldType:{}", field.getName(), fieldType);
        if (StringUtils.equalsAny(fieldType, "class java.lang.Long", "long")) {
            field.set(object, Long.parseLong(value.toString()));
        } else if (StringUtils.equals(fieldType, "class java.math.BigDecimal")) {
            field.set(object, new BigDecimal(value.toString()));
        } else if (StringUtils.equals(fieldType, "class java.lang.Float")) {
            BigDecimal bigDecimal = new BigDecimal(value.toString());
            field.set(object, bigDecimal.floatValue());
        } else if (StringUtils.equals(fieldType, "class java.lang.String")) {
            field.set(object, value.toString());
        } else {
            throw new Exception("setField(),fieldName:" + field.getName() + ", field type 不匹配");
        }
    }
 /**
     * 反射给对象赋值
     *
     * @param object 对象
     * @param fieldName 字段名
     * @param value 字段值
     * @param isHump fieldName是否需要转为驼峰格式
     */
    public static void setObjectField(Object object, String fieldName, Object value, boolean isHump) {
        try {
            if (isHump) {
                fieldName = lineToHump(fieldName);
            }
            Field field = ReflectionUtils.findField(object.getClass(), fieldName);
            if (field == null) {
                log.info("setObjectField fieldName :{} not exist", fieldName);
                return;
            }
            if (org.apache.commons.lang3.ObjectUtils.isEmpty(value)) {
                log.info("setObjectField fieldName :{} value is null", fieldName);
                return;
            }
            boolean accessible = field.isAccessible();
            if (!accessible) {
                field.setAccessible(true);
                setField(field, object, value);
                field.setAccessible(false);
            } else {
                setField(field, object, value);
            }
        } catch (Exception e) {
            log.error("fieldName:{}, setObjectField,异常堆栈:", fieldName, e);
            log.error("setObjectField error ", e);
        }
    }


public static final String STR = "_(\\w)";


public static String lineToHump(String str) {
        Pattern linePattern = Pattern.compile(STR);
        str = str.toLowerCase();
        Matcher matcher = linePattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }


 /**
     * jsonstring数据转换成对象
     * 备注:带有下划线的特殊格式
     */
    private List<SellerHotItemDTO> objectExt(String str) {
        List<SellerHotItemDTO> result = Lists.newArrayList();
        JSONArray objects = JSONArray.parseArray(str);
        AtomicInteger count = new AtomicInteger(0);
        objects.forEach(n -> {
            SellerHotItemDTO sellerHotItemDTO = new SellerHotItemDTO();
            JSONObject object = JSONObject.parseObject(n.toString());
            if (!object.keySet().isEmpty()) {
                Set<String> strings = object.keySet();
                strings.forEach(e -> {
                    Object obj = object.get(e);
                    //2。数据带有下划线,需要转换成驼峰映射
                    ObjectUtils.setObjectField(sellerHotItemDTO, e, obj, true);
                });
                //只要前10个商品的
                count.getAndIncrement();
                if (count.get() > Constants.TEN) {
                    return;
                }
                result.add(sellerHotItemDTO);
            }
        });
        return result;
    }

结果:

querySellerHotItemsList.response:[{"itemTitle":"(买一送一) 浅米灰(加绒加厚)情侣鞋","imageUrl":null,"itemId":1},{"itemTitle":"(买一送一) 三元灰(四季款)情侣鞋","imageUrl":null,"itemId":2},{"itemTitle":"(买一送一) 浅米灰(加绒加厚)情侣鞋","imageUrl":null,"itemId":3},{"itemTitle":"(买一送一) 浅米灰(四季款)情侣鞋","imageUrl":null,"itemId":4},{"itemTitle":"(买一送一) 浅米灰(加绒加厚)情侣鞋","imageUrl":null,"itemId":5},{"itemTitle":"断码运动鞋随机发","imageUrl":null,"itemId":6},{"itemTitle":"(买一送一) 碳灰黑(加绒加厚)情侣鞋","imageUrl":null,"itemId":7},{"itemTitle":"(买一送一) 浅米灰(四季款)情侣鞋","imageUrl":null,"itemId":8},{"itemTitle":"(买一送一) 深灰黑(四季款)情侣鞋","imageUrl":null,"itemId":9}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值