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里已经解决了这个问题了

工具类下载链接:

- http://download.csdn.net/detail/u013132051/9524654

Json串与实体的相互转换 (不依赖于jar包 只需Eclipse环境即可)的更多相关文章

  1. json学习系列(1)-使用json所要用到的jar包下载

    内容来源于互联网. json是个非常重要的数据结构,在web开发中应用十分广泛.每个开发者都应该好好的去研究一下json的底层实现.在使用json之前首先要明白需要哪些jar文件,初次使用的时候很容易 ...

  2. (1)-使用json所要用到的jar包下载

    json是个非常重要的数据结构,在web开发中应用十分广泛.我觉得每个人都应该好好的去研究一下json的底层实现,需要准备下面的六个jar包:commons-lang-1.0.4.jar common ...

  3. json教程系列(1)-使用json所要用到的jar包下载

    json是个非常重要的数据结构,在web开发中应用十分广泛.我觉得每个人都应该好好的去研究一下json的底层实现,基于这样的认识,金丝燕网推出了一个关于json的系列教程,分析一下json的相关内容, ...

  4. 【jar包】Android——eclipse共享library以及导出jar包

    android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明 ...

  5. AndroidStudio中安装可自动生成json实体类的jar包

    第一步:安装gsonjar包, 这样gson包就下载好了.接下来安装能自动生成实体类的插件: 接下来不要忘了重启: 重启后,就可以通过自定义的快捷键 alt+shift+s来打开generate,从而 ...

  6. 如何把一个jar包导入到eclipse中

  7. 1、在eclipse中导入Java的jar包方法---JDBC【图文说明】

    1.Eclipse环境下jar包导入 在Eclipse环境下编写Java程序,常常会借用到各种jar包.如:连接数据库时,导入jar包是必须的.导入方法如下: 1.打开eclipse,右击要导入jar ...

  8. 常见 jar包详解

        常见 jar包详解 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期 ...

  9. java开发常用jar包

    mail.jar与activation.jar 里面包含了activation.jar和mail.jar两个包.通过里面的类的调用便可以达到发送电子邮件的目的 commons-beanutils.ja ...

随机推荐

  1. [Python学习]错误篇二:切换当前工作目录时出错——FileNotFoundError: [WinError 3] 系统找不到指定的路径

    REFERENCE:<Head First Python> ID:我的第二篇[Python学习] BIRTHDAY:2019.7.13 EXPERIENCE_SHARING:解决切换当前工 ...

  2. 接口文档注解:@ApiOperation

    @ApiOperation不是spring自带的注解是swagger里的 com.wordnik.swagger.annotations.ApiOperation; @ApiOperation和@Ap ...

  3. django项目中遇到要实现定时任务

    django项目中遇到要实现定时任务,所以选用了简单易用的django-crontab插件. 1.安装 django-crontab pip install django-crontab 2.定时要执 ...

  4. MyBatis从入门到精通(2):MyBatis XML方式的基本用法

    本章将通过完成权限管理的常见业务来学习 MyBatis XML方式的基本用法 2.1一个简单的权限控制需求 权限管理的需求: 一个用户拥有若干角色,一个角色拥有若干权限,权限就是对某个模块资源的某种操 ...

  5. Java编程思想:泛型接口

    import java.util.Iterator; import java.util.Random; public class Test { public static void main(Stri ...

  6. I/O:FileChannel

    FileChannel: abstract void force(boolean metaData) :强制将所有对此通道的文件更新写入包含该文件的存储设备中. abstract MappedByte ...

  7. 个人永久性免费-Excel催化剂功能第82波-复制粘贴按源区域大小自动扩展收缩目标区域

    日常工作中,复制粘贴的操作,永远是最高频的操作,没有之一,在最高频的操作上,进行优化,让过程更智能,比一天到晚鼓吹人工智能替换人的骇人听闻的新闻来得更实际.此篇带来一点点的小小的改进,让日后无数的复制 ...

  8. 题解 P5367 【【模板】康托展开】

    P5367 [模板]康托展开 感觉这题难度大概在绿题到蓝题之间qwq 一.洛谷日报[yummy]浅谈康托展开 如我想知道321是{1,2,3}中第几个小的数可以这样考虑 : 第一位是3,当第一位的数小 ...

  9. C语言入门9-2-模块大致一览

    字母数字 判断字符是否为英文字母isalpha()判断字符是否为数字isdigit()判断字符是否为英文字母或数字isalnum()判断字符是否为小写字母islower()判断字符是否为大写字母isu ...

  10. 多线程与高并发(五)final关键字

    final可以修饰变量,方法和类,也就是final使用范围基本涵盖了java每个地方,我们先依次学习final的基础用法,然后再研究final关键字在多线程中的语义. 一.变量 变量,可以分为成员变量 ...