JSON的三种处理方式  Jackson提供了三种可选的JSON处理方法(一种方式及其两个变型):

  • 流式 API:(也称为"增量分析/生成") 读取和写入 JSON 内容作为离散事件。

  • 树模型 :提供一个 JSON 文档可变内存树的表示形式。

    • org.codehaus.jackson.map.ObjectMapper 生成树 ;树组成 JsonNode 节点集。

    • 树模型类似于 XML DOM。
  • 数据绑定: JSON和POJO相互转换,基于属性访问器规约或注解。

    • 有 两种变体: 简单 和 完整 的数据绑定:

    • 简单数据绑定: 是指从Java Map、List、String、Numbers、Boolean和空值进行转换

    • 完整数据绑定 :是指从任何 Java bean 类型 (及上文所述的"简单"类型) 进行转换

    • org.codehaus.jackson.map.ObjectMapper 对两个变种,进行编组(marshalling )处理 (写入 JSON) 和反编组(unmarshalling ,读 JSON)。

    • JAXB激励下的基于注释的 (代码优先)变种。

从使用的角度来看,总结这些3 种方法的用法如下:

  • 流 API: 性能最佳的方式 (最低开销、 速度最快的读/写; 其它二者基于它实现)。

  • 数据绑定 :使用最方便的方式。

  • 树模型: 最灵活的方式。

额,直接贴出所有代码吧,该说的都在代码中了

  1. package com.wujintao.json;
  2. import java.io.IOException;
  3. import java.util.Date;
  4. import org.codehaus.jackson.JsonGenerationException;
  5. import org.codehaus.jackson.map.JsonMappingException;
  6. import org.codehaus.jackson.map.ObjectMapper;
  7. import org.codehaus.jackson.map.ObjectReader;
  8. import org.codehaus.jackson.map.ObjectWriter;
  9. import org.junit.Test;
  10. /**
  11. * http://wiki.fasterxml.com/JacksonDownload
  12. * http://wiki.fasterxml.com/JacksonInFiveMinutes
  13. * http://wiki.fasterxml.com/JacksonBestPracticesPerformance
  14. * http://jackson.codehaus.org/1.8.8/javadoc/index.html
  15. * http://wiki.fasterxml.com/ObjectReader
  16. * https://github.com/FasterXML/jackson-docs/wiki/ObjectWriter
  17. * jars:jackson-core-lgpl-1.8.10.jar,jackson-mapper-lgpl-1.8.10.jar
  18. *
  19. * 1.实践结果,无论是哪种形式的转换,Jackson > Gson > Json-lib。Jackson的处理能力甚至高出Json-lib有10倍左右
  20. * 2.JSON-lib似乎已经停止更新,最新的版本也是基于JDK15,而Jackson的社区则较为活跃
  21. * 3.高并发情况下jackson表现尤为优越,内存占用甚少,json-lib会占用很多内存
  22. *
  23. */
  24. public class TestCase {
  25. @Test
  26. public void test() throws JsonGenerationException, JsonMappingException,
  27. IOException {
  28. long start = new Date().getTime();
  29. ObjectMapper mm = new ObjectMapper(); // can reuse, share
  30. Person pp = new Person();
  31. pp.setAdd("beijing");
  32. pp.setAge(11);
  33. pp.setSalary(1.1);
  34. pp.setSex('男');
  35. String jj = mm.writeValueAsString(pp);
  36. System.out.println(jj);
  37. Person pp2 = mm.readValue(jj, Person.class);
  38. System.out.println(pp2);
  39. long end = new Date().getTime();
  40. System.out.println("using ObjectMapper cost:"+(end-start)+"ms");
  41. System.out.println("=================================");
  42. // 7. Prefer ObjectReader/ObjectWriter over ObjectMapper
  43. // Although the main reason to prefer these objects is thread-safety
  44. // (and thus correctness),there may be performance benefits as well
  45. // 8.When reading a root-level sequence of POJOs,
  46. // readValues() method of ObjectReader can be much more efficient
  47. // than doing explicit iteration using ObjectMapper.readValue() method.
  48. long start2 = new Date().getTime();
  49. ObjectMapper mapper = new ObjectMapper();
  50. Person person = new Person();
  51. person.setAdd("beijing");
  52. person.setAge(11);
  53. person.setSalary(1.1);
  54. person.setSex('男');
  55. ObjectWriter writer = mapper.viewWriter(Person.class);
  56. String json = writer.writeValueAsString(person);
  57. System.out.println(json);
  58. // we'll be reading instances of MyBean
  59. ObjectReader reader = mapper.reader(Person.class);
  60. // and then do other configuration, if any, and read:
  61. Person result = reader.readValue(json);
  62. System.out.println(result);
  63. long end2 = new Date().getTime();
  64. System.out.println("using ObjectReader/ObjectWriter cost:"+(end2-start2)+"ms");
  65. //官网建议使用ObjectReader/ObjectWriter
  66. }
  67. //还有fast-json、Genson 等没做研究
  68. }

Jackson优化使用实例的更多相关文章

  1. 第十七章——配置SQLServer(4)——优化SQLServer实例的配置

    原文:第十七章--配置SQLServer(4)--优化SQLServer实例的配置 前言: Sp_configure 可以用于管理和优化SQLServer资源,而且绝大部分配置都可以使用SQLServ ...

  2. Jackson的用法实例分析

    这篇文章主要介绍了Jackson的用法实例分析,用于处理Java的json格式数据非常实用,需要的朋友可以参考下 通俗的来说,Jackson是一个 Java 用来处理 JSON 格式数据的类库,其性能 ...

  3. Nginx中FastCGI参数的优化配置实例

    在配置完成Nginx+FastCGI之后,为了保证Nginx下PHP环境的高速稳定运行,需要添加一些FastCGI优化指令.下面给出一个优化实例,将下面代码添加到Nginx主配置文件中的HTTP层级. ...

  4. IOS第七天(4:UiTableView 数据的显示优化重复实例和tableFooterView和tableHeaderView)

    //加上头部 和底部 - (void)viewDidLoad { [super viewDidLoad]; [self tableView]; // 设置行高 self.tableView.rowHe ...

  5. memcached优化方案实例

    <?php //引入memcached require_once '../class/memcached.class.php'; //连接MySQL $link = mysqli_connect ...

  6. Java-Runoob-高级教程-实例-字符串:12. Java 实例 - 字符串优化

    ylbtech-Java-Runoob-高级教程-实例-字符串:12. Java 实例 - 字符串优化 1.返回顶部 1. Java 实例 - 字符串优化  Java 实例 以下实例演示了通过 Str ...

  7. MySQL学习笔记十五:优化(2)

    一.数据库性能评测关键指标 1.IOPS:每秒处理的IO请求次数,这跟磁盘硬件相关,DBA不能左右,但推荐使用SSD. 2.QPS:每秒查询次数,可以使用show status或mysqladmin ...

  8. Nginx中FastCGI配置优化

    FastCGI: FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器 ...

  9. Oracle优化的几个简单步骤

    数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等.还有的人认为要抓出执行最慢的语句来进行优化.但实际情况 ...

随机推荐

  1. 【转】Kerberos简介

    Kerberos协议: Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-grantin ...

  2. cmdb采集数据的版本

    在局部配置文件中配置MODE=' agent',或者MODE=‘ssh’,或者MODE=‘’saltstack ',  实现只需要修改这个配置,就会使用对应的方案进行采集数据 第一种版本: 启动文件中 ...

  3. 树莓派4B踩坑指南 - (13)用samba建立家庭局域网共享中心

    树莓派在家中至少三个作用:家庭资源共享中心.无线打印服务器.下载服务器. 家庭资源共享中心用samba实现家庭局域网共享,树莓派4B的话可以接2个3.0的移动硬盘. 实测速度不快,Win读2Mb/s写 ...

  4. dvwa学习之七:SQL Injection

    1.Low级别 核心代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input $id = $_REQUEST[ 'id' ]; ...

  5. 《自拍教程51》Python_adb批量生成App版本表格

    案例一:版本在软件研发阶段是很重要的, 不同的版本, 已修复的Bug也不一样, 所实现的功能不一样, Android终端产品正式版本发布前,项目经理除了确保系统版本确定无误外, 还会逐个验证所搭载的所 ...

  6. C#中的9个“黑魔法”与“骚操作”

    C#中的9个"黑魔法"与"骚操作" 我们知道C#是非常先进的语言,因为是它很有远见的"语法糖".这些"语法糖"有时过于好 ...

  7. sql-lib闯关61-65

    第六十一关 和六十关基本一样,就是变成了单引号和双括号,这好像是第一次遇见双括号 爆数据库名   ?id=1'))and extractvalue(1, concat(0x5c, (select da ...

  8. 一个完整的机器学习项目在Python中演练(四)

    大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习.但是,实际情况往往d是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中.就像你的脑海中已经有了一块块" ...

  9. 【原创】linux spinlock/rwlock/seqlock原理剖析(基于ARM64)

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  10. python—异常处理try

    写代码的时候会遇到各种各样的异常,那么代码就不会继续往下走了.比如说10除以0是错误的,因为除数不能为零学会捕捉异常,在异常出现的时候我们要做什么操作. 捕捉异常 d={} #例如定义字典 try: ...