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}]