解决Gosn在集合中int自动转换为duble类型
来源:互联网 发布:压花辊雕刻加工编程 编辑:程序博客网 时间:2024/06/09 17:53
import com.google.gson.Gson;import com.google.gson.GsonBuilder;import com.google.gson.JsonArray;import com.google.gson.JsonDeserializationContext;import com.google.gson.JsonDeserializer;import com.google.gson.JsonElement;import com.google.gson.JsonObject;import com.google.gson.JsonParseException;import com.google.gson.JsonParser;import java.lang.reflect.Type;import java.util.Iterator;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 验证正则表达式是否能执行出 有效值 * @param param * @param regex * @return boolean */public static boolean hasFulfilRegex(String param, String regex) {Pattern p = Pattern.compile(regex);Matcher m = p.matcher(param);return m.find();} /** * JSON数据转Map,解决Integer默认为Double的问题。 * @param json * @return * @throws Exception */@SuppressWarnings("unchecked")public static List<Map<String, Object>> jsonConvertToList(String json) throws Exception { //重写Gson GsonBuilder gsonBuilder = getMapGsonBuilder(); List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>(); JsonParser parser = new JsonParser(); JsonElement jsonelement = parser.parse(json); if(jsonelement.isJsonArray()) { //使用上面重写过的GsonBuilder创建Gson Gson gson = gsonBuilder.create(); for(int i=0; i<jsonelement.getAsJsonArray().size(); i++) { Map<String, Object> map = gson.fromJson(jsonelement.getAsJsonArray().get(i), HashMap.class); mapList.add(map); } } else { //使用上面重写过的GsonBuilder创建Gson Gson gson = gsonBuilder.create(); Map<String, Object> map = gson.fromJson(jsonelement, HashMap.class); mapList.add(map); } return mapList; } /** * 获取GsonBuilder对象 * @return */ private static GsonBuilder getMapGsonBuilder() { //重写Gson GsonBuilder gsonBuilder = new GsonBuilder().registerTypeAdapter(HashMap.class, new JsonDeserializer<Object>() {@SuppressWarnings({ "unchecked", "rawtypes" })@Overridepublic Object deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {//返回的Map集合Map<String, Object> map = new HashMap<String, Object>();//创建一个JsonArrayJsonArray jsonArray = new JsonArray();//把Json节点装入JsonArray集合中if(jsonelement.isJsonObject()) {jsonArray.add(jsonelement);} else if(jsonelement.isJsonArray()) {jsonArray.addAll(jsonelement.getAsJsonArray());}//循环处理Json节点for(int j=0; j<jsonArray.size(); j++) {//判断是否是Json对象,如果不是,则返回字符串if(jsonArray.get(j).isJsonObject()) {//获取Json对象节点JsonObject jsonObject = jsonArray.get(j).getAsJsonObject(); //开始迭代 Iterator iterator = jsonObject.entrySet().iterator(); while(iterator.hasNext()) { //通过等号分隔 String[] array = iterator.next().toString().split("="); //判断是否是Json节点数组 if(jsonObject.get(array[0]).isJsonArray()) { //获取Json节点数组 JsonArray subJsonArray = jsonObject.get(array[0]).getAsJsonArray(); List<Object> subList = new ArrayList<Object>(); //循环Json节点数组 for(int i=0; i<subJsonArray.size(); i++) { Map<String, Object> subMap = new HashMap<String, Object>(); //递归获取Json节点数据 Object subObject = deserialize(jsonObject.get(array[0]), type, jsondeserializationcontext); //判断返回的是否是String字符串 if(Tools.hasFulfilRegex(subObject.getClass().toString(), "java.lang.String")) { subList.add(String.valueOf(subObject)); } else { subMap.putAll((Map<String, Object>)subObject); subList.add(subMap); } } map.put(array[0], subList); } else if(jsonObject.get(array[0]).isJsonObject()) { Map<String, Object> subMap = new HashMap<String, Object>(); subMap.putAll((Map<String, Object>)deserialize(jsonObject.get(array[0]), type, jsondeserializationcontext)); map.put(array[0], subMap); } else if(Tools.hasFulfilRegex(jsonObject.get(array[0]).getAsString().trim(), "^\\d+$")) { //如果属性值是数字,则转换成Long类型,重写Gson默认转为Double的 map.put(array[0], jsonObject.get(array[0]).getAsLong()); } else if(Tools.hasFulfilRegex(jsonObject.get(array[0]).getAsString().trim(), "^\\d+\\.\\d+$")) { //如果属性值包含小数点,则转为Double类型 map.put(array[0], jsonObject.get(array[0]).getAsDouble()); } else { map.put(array[0], jsonObject.get(array[0]).getAsString()); } }} else {//判断是否是Json对象,如果不是,则返回字符串return jsonArray.get(j).toString();}} return map;}}); return gsonBuilder; }
阅读全文
0 0
- 解决Gosn在集合中int自动转换为duble类型
- MFC 中 CString 转换为 int 类型
- c++中int转换为char* 类型
- SQL中时间数值int类型转换为时间类型
- C++中int、double类型转换为string类型
- java中如何将Object类型转换为int类型
- java中long类型转换为int类型
- QT中吧QString类型转换为int类型
- Java中如何将int 类型转换为 Long类型
- Java中如何将int 类型转换为 Long类型
- java中long类型转换为int类型
- java中long类型转换为int类型
- java中long类型转换为int类型
- java中long类型转换为int类型
- 自动提升为int类型
- String转换为int类型
- C#中DateTime的DayOfWeek、DayOfYear转换为Int类型
- C语言中int,duoble数据转换为char类型
- 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
- 消息队列的pull与push模式理解
- HDU 4971 A simple brute force problem
- find the longest of the shortest
- ThinkPHP5 支付宝支付扩展库(超简单,超好用~)
- 解决Gosn在集合中int自动转换为duble类型
- char *s 和 char s[] 的区别小结
- druid 的filter设计原理
- C++ 整数与字符串相互转化
- TCP/IP 详解卷一学习笔记(五):TCP 成块数据流
- tensorflow笔记
- Hibernate——如何使用二级缓存
- python2,将unicode类型的变量输出
- ROC评估曲线的坑