在对json字符串取值时,有些长数字被解析成了科学记数法的形式,导致接口请求失败;所以需要对json值进行类型判断并进行转换:
- 利用java.math.BigDecimal可以创建对象对数字形式进行转换,同时可以利用其创建对象时的异常信息来进行数字判断
判断是否为数字:
public static boolean isNumeric(String str) {
//如果是数字,创建new BigDecimal()时肯定不会报错,那就可以直接返回true
String bigdecimal;
try {
bigdecimal= new BigDecimal(str).toString();
} catch (Exception e) {
return false;//异常 说明包含非数字。
}
return true;
}
- 接着就可以利用判断结果进行转换了
map = new Gson().fromJson(String.valueOf(list.get(i)),HashMap.class);
String oldValue = map.get("value").toString();
if (isNumeric(oldValue)){
BigDecimal value = new BigDecimal(oldValue);
restful.query.put(map.get("name").toString(),value);
}else {
restful.query.put(map.get("name").toString(),map.get("value"));
}
- 这个时候再运行,取出来的值就正常了