net.sf.json将json字符串转换为json对象时 对象中的List属性均为空

1.发现问题

今天在使用JSONArray.toList(jsonArray,Object,jsonConfig)来转换一个比较复杂的json字符串时 发现转换对象中的List属性的字段均为空,猜想是工具未将数据写入。

2.大胆猜想

在查看转换源码时发现了一个比较奇特的类(其实也是受网上的文章的启发 容我装个逼),classmap,我们可以发现对于JSONObject对象中的JSONArray是这么处理的

targetClass = findTargetClass(key, classMap);
argetClass = targetClass == null ? findTargetClass(name, classMap) : targetClass;
newRoot = jsonConfig.getNewBeanInstanceStrategy().newInstance(targetClass, (JSONObject)null);
List list = JSONArray.toList((JSONArray)value, newRoot, jsonConfig);
 setProperty(root, key, list, jsonConfig);

这玩意是一个迭代啊,如果是JSONArray一直调用JSONArray.toList()方法,等等 那目标的类是哪里来的,我们可以发现keyname均是当前的JSONArraykey值,当然也就是我们的实体类对象的属性名了,用这个属性名去去了一个class然后给实例化了,这不就是我们上边的JSONArray.toList(jsonArray,Object,jsonConfig)中的Object吗,大胆测试这就是属性的对象;
在这个jsonConfig.getNewBeanInstanceStrategy().newInstance(targetClass, (JSONObject)null);方法中发现一段话

Constructor c = target.getDeclaredConstructor(EMPTY_PARAM_TYPES);
                c.setAccessible(true);

看起来实例化时需要一个无参的构造方法

3.解决问题

新建一个Map 将所有属性为List的字段都加进去

  • key-->属性的名称
  • value-->属性的类型(属性的类.class)

然后

sonConfig jsonConfig=new JsonConfig();
        jsonConfig.setClassMap(classMap);

全部代码在此

JSONArray jsonArray=JSONArray.fromObject(zmString);
        Map classMap=new HashMap();
        classMap.put("pleInfos",PleInfo.class);
        classMap.put("ownersInfos",OwnersInfo.class);
        classMap.put("limitInfos",LimitInfo.class);
        classMap.put("preInfos",PreInfo.class);
        JsonConfig jsonConfig=new JsonConfig();
        jsonConfig.setClassMap(classMap);
        List<QueryInfo> queryInfoList= JSONArray.toList(jsonArray,new QueryInfo(),jsonConfig);

那些个字符串就是我的那些List属性的字段了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • 1 反射机制&JSON解析 【 Java的高级特性:反射机制 publicclass Student { pu...
    征程_Journey阅读 957评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 给自己阳光阅读 116评论 0 0
  • 青春本该是喷薄的 我却是安静的 青春本该是被人羡慕的 而我 却是讨厌的
    赤足者阅读 101评论 0 0