Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可)
Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可) 最近学习了javaWeb开发,用的是ssh框架里面自己整合了hibernate 和Struts2 和spring框架,其中就遇到了一个问题--json的转换的问题。考虑到程序的稳定性,我花三天的时间研究json的转换,网上的代码有很多,但是都是依赖于一些写好的jar包,我导入这些jar包后都提示少东西要么就是提示错误所以我就自己手写了一个工具类,使用我的这个工具类就可以直接使用工具进行转换了不需要导入任何jar包。需要的程序员可以看看,代码还有不足的地方还在改进
- 工具类 JsonConEntity
- 定义为私有的构造函数 成为单列 方便使用
- 首先使用到的是拿到json串中实体个数
for(int i=0;i<JsonConEntity.getCount(str);i ){ Module entity=new Module(); list.add(entity); }
- 这里是getCount方法
public static Integer getCount(String json){ Map<Integer, Map<String, Object>> bigMap = JsonConEntity.getMap(json); return bigMap.size(); }
- 创建好对应的实体后我们就可以调用核心代码实现了
list = JsonConEntity.jsonToEntity2(str, list);
- 在核心代码里我们首先需要将json串转换到一个集合中,这里我用的是map集合来装取
Map<Integer, Map<String, Object>> bigMap = getMap(json);
- 将数据装到map中之后我们就可以遍历了,在遍历中取到的实际上已经是一个实体的数据了
- 在得到实体后的方法定义
- 拿到一个实体的map参数数据之后我们还需要对实体的属性进行遍历赋值
Field[] fields = tClass.getDeclaredFields(); for (Field field : fields) {
- 在这里我们就可以遍历真正的实体中的属性的名称了,然后我们将真正实体中的属性和map集合中对应的实体的属性进行比较从而方便了我们的赋值
- PropertyDescriptor pd = new PropertyDescriptor( field.getName(), tClass); // 获得set方法 Method method = pd.getWriteMethod(); String str = map.get(key1).toString();
- 这样我们就可以操作实体中的set方法了,在这里V1.0中没有对实体总的set方法进行判断导致了一个错误 就是导致实体中的所有的属性在你传过来的json中必须要有对应字段值,这样的话很不符合json和实体转换的初衷,所以在V2.0中我解决了这个问题,在哪实体中的set方法前先与json中对应的实体的属性进行比较,json串中没有的就不用在拿实体中的set方法了,json中有的在去实体中拿set方法,然后通过set方法将值传过去,这样就起到了json转换实体的作用了,到这里我的思想也就玩了,同志们还没懂得自己看看我的代码吧,在文章的最后会贴上下载链接的
- 下面就是实体转换成json串了这个相对简单很多,我们只需要拿到属性然后就行拼接之后就可以了,
- 使用说明小提示:
- -----无jar包支持 纯手写代码
要求
- json格式为 [{},{},.....]或{}
- 在调用此工具类中的实体向json转换的时候实体的所有属性至少必须有get方法 否则无法用此工具类生成json串。在json转换为实体的时候需要将json串中有的属性值必须要有set方法,否则也无法正常的进行转换。
- 在实体转换json时只需要将实体创建好然后进行工具转换就行了
- 在json转换成实体的时候我们麻烦一步,需要向用工具类拿到json串的实体的个数,然后向创建出N个空的实体用来接收json串中的实体,新创建的N的实体我们一次加入到list里面然后将整个list传到json工具类中,最后我们遍历这个list就行了
- V1.0中我只能解析json串中的整数型不能有引号。 也就是说实体的属性的int型的那么我们的json里面的对应的属性不能有引号。 在V2.0里已经解决了这个问题了
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!