热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

转换json_如何优雅的进行obj与json的转换

前段时间,有个小哥问我JSON转换的问题?他说,我们平时使用最多的JSON转换工具是什么,其实现在JSON转换的框架比较多&

前段时间,有个小哥问我JSON转换的问题?

    他说,我们平时使用最多的JSON转换工具是什么,其实现在JSON转换的框架比较多,例如:

Jackson,Gson,Fastjson都可以实现,Gson主要在安卓开发中用的较多

1、JSON介绍  

    JSON(Javascript Object Notation)全称Js对象符号,是一种轻量级的数据交换格式,它基于 ECMAScript 标准规范。采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

2、JSON的使用场景

      JSON用的最多的地方莫过于Web以及移动APP的应用,也就是说不管是用手机还是电脑访问互联网,都会涉及到JSON的数据传输

a808127f3ee830e3e88a7d6346078294.png

21d06606bcc7cb84cf675ae0ee861832.png

3、JSON长啥样

      json有两种数据格式

      1、数组方式

[{"id" : 1 ,"name" : "xiaoming"},{"id" : 2 , "name" : "xiaohong"}]

      2、对象方式

{"username":"zhangsan","age":28,"password":"123","addr":"北京"}

4、Java对象到Json的转换

       1、定义Java对象  

@Data@NoArgsConstructorpublic class Person{ private String name; private int age;}

     2、使用gson转换json

             1、添加依赖

com.google.code.gsongroupId> gsonartifactId> 2.8.6version>dependency>

           2、转换,序列化与反序列化

 GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setDateFormat("yyyy-MM-dd hh:mm:ss");  //设置日期格式 Gson gson = gsonBuilder.create();  Person person = new Person("jack",new Date()); String s = gson.toJson(person); System.out.println("s = " + s);    //转换json Person p1 = gson.fromJson(s,Person.class); System.out.println("p1 = " + p1);  //反序列化person对象

      3、使用jackson转换json

           1、添加依赖

com.fasterxml.jackson.coregroupId> jackson-databindartifactId> 2.7.4version>dependency>

          2、转换,序列化与反序列化

ObjectMapper objectMapper = new ObjectMapper();objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"));Person person = new Person("jack",new Date());String string = objectMapper.writeValueAsString(person); //序列化jsonSystem.out.println("string = " + string);Person p1 = objectMapper.readValue(string, Person.class);//反序列化person对象System.out.println("p1 = " + p1);

      4、使用fastJson转换json

           1、添加依赖

com.alibabagroupId> fastjsonartifactId> 1.1.23version> dependency>

           2、转换,序列化与反序列化

Person person = newPerson("jack",new Date());String string = JSON.toJSONString(person, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteDateUseDateFormat);System.out.println("string = " + string);//序列化JSONPerson p1 = JSON.parseObject(string,Person.class);//反序列化Person对象System.out.println("p1 = " + p1);

5、总结

      代码书写方面,fastjson最简洁,jackson与gson次之

     性能方面:把Java对象JSON序列化,

                      Jackson速度最快,在测试中比Gson快接近50%,FastJSON和Gson速度接近。 
                      把JSON反序列化成Java对象,

                       FastJSON、Jackson速度接近,Gson速度稍慢,不过差距很小

附、使用rain-tool工具库的core组件转换json

       1、简介

           rain-tool是本人结合这几年的工作经历,封装的一套关于Java产品开发各个方面的工具库,其中就包含了json的转换

           详情请访问:https://gitee.com/windsound/rain.git

       2、使用

            1、引入依赖

      com.gitee.windsoundgroupId> rain-mybatis-toolartifactId> 1.0.0version>dependency>

            2、转换,序列化与反序列化

Person person = new Person("jack",new Date());String s = JSONUtil.toJson(person); //序列化jsonSystem.out.println("s = " + s);Person parse = JSONUtil.parse(s, Person.class); //反序列化person对象System.out.println("parse = " + parse);

         3、结语

              大家会发现,使用rain-tool转换json,代码更简洁,

              同时,内部依赖采用了Jackson,从而也保证了性能




推荐阅读
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 为了优化用户体验,本文探讨了如何调整下拉菜单的宽度。通过合理设置宽度,可以提升界面的美观性和易用性。文章提供了具体的代码示例,帮助开发者实现这一目标。例如,可以通过 CSS 或 JavaScript 来动态调整下拉菜单的宽度,确保其在不同设备和屏幕尺寸上都能保持良好的显示效果。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • Java并发机制详解及其在数据安全性保障中的应用方案 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • C语言中如何使用break语句强制跳出for循环及函数 ... [详细]
author-avatar
那尼1_388
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有