首页 > 编程知识 正文

BUG记录 JSON转对象部分字段丢失,qq聊天记录部分丢失

时间:2023-05-04 03:55:35 阅读:228943 作者:4077

在进行http请求之后或者其他只能获取到JSON字符串的场景中,我们在处理的时候经常会转为实体对象,以前一直使用阿里的fastjson转换无往不利,但是今天碰到问题了

//json转对象JSON.parseObject(jsonStr, Object.class);//对象转JSONJSON.toJSONString(obj)

 

 

问题:在JSON转为实体对象的时候部分字段没有转换过来,仍然为null;

原因:未知,可能是因为有list字段,有空试下再更新

解决办法:先把JSON转为Map<String, Object>(所有有数据的字段都会转换成功,包括list字段),然后再把map转为实体对象

public static Object jsonToObject(String json, Class<?> beanClass) throws Exception {if (StringUtils.isBlack(json))return null; Map<String, Object> map = JSON.parseObject(json, Map.class); Object obj = beanClass.newInstance(); Field[] fields = obj.getClass().getDeclaredFields();for (Field field : fields) {int mod = field.getModifiers();if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){continue;} if(map.get(field.getName()) == null){continue;} field.setAccessible(true);if(field.getType().getName().equals("java.lang.Long")){field.set(obj, Long.valueOf(map.get(field.getName()) + ""));}else if(field.getType().getName().equals("java.lang.Double")){field.set(obj, Double.valueOf(map.get(field.getName()) + ""));}else if(field.getType().getName().equals("java.lang.Integer")){field.set(obj, Integer.valueOf(map.get(field.getName()) + ""));}else{field.set(obj, map.get(field.getName()));}} return obj;}

 

 

这个问题我目前这个规避解决了,有知道原因的或者看过了fastjson或者有其他解决办法的同学欢迎交流~~~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。