陆小飞

https://www.jianshu.com/p/eeba48f1e563

在现代的整个互联网的交互通信中,json 表达的简洁性和文本化的特性给我们带来很大的操作便捷性。所以大量的通信都使用这种表达方式。

但是对于 json 方式,大家有比较多的解析方式,其中阿里开源的 fastjson 相信是我们大家使用最多的一种。但是我们现在有一种更好的解析方式 ----jsoncode,maven 包引用是这样的:

<dependency><groupId>cn.miludeer</groupId><artifactId>jsoncode</artifactId><version>1.2.4</version>
</dependency>

下面我们做个实验,比较 jsoncode 和 fastjson 两者之前的区别。比如我们解析下面这段 json 结构:

{"json": {"a": {"www": "ff","rrr": ["v1", "v2"]},"b": {"www": "4567ttt","rrr": ["v1", "v2"]}}
}

我们想要获取【json】下的【b】下的【www】的值 “4567ttt”,测试代码如下:

public class Jsontest {private static String json = "{\"json\":{\"a\":{\"www\":\"ff\",\"rrr\":[\"v1\",\"v2\"]},\"b\":{\"www\":\"4567ttt\",\"rrr\":[\"v1\",\"v2\"]}}}";public static String usefastjson() {  JSONObject ob = JSON.parseObject(json).getJSONObject("json").getJSONObject("b");return ob.getString("www");}public static String usejsoncode() {   String ret = JsonCode.getValue(json, "$.json.b.www");return ret;}public static void main(String[] argv) {long time1 = System.currentTimeMillis();for(int i=0; i<10000000;i++) {usejsoncode();}long time2 = System.currentTimeMillis();for(int i=0; i<10000000;i++) {usefastjson();}long time3 = System.currentTimeMillis();System.out.println("fastJson:" + (time3 - time2));System.out.println("jsoncode:" + (time2 - time1));}
}

执行之后结果如下:

fastJson:10772
jsoncode:6457

从运行 10000000 次,消耗时间的结果上可见:目前的测试条件下,确实是 fastjson 稍微劣势。这么差,我们还要用它么?

我们下面转入正题,这里先不说 fastjson 的在处理上的性能,更何况这里的测试也不是很全面。这里主要说的是使用 jsoncode 在编程操作的便捷上优化。

我们仔细研究下两者的处理方式。
fastjson 的方式:

String value = JSON.parseObject(json).getJSONObject("json").getJSONObject("b").getString("www");

jsoncode 的方式:

String value = JsonCode.getValue(json, "$.json.b.www");

明显看到两者的取数据上的区别,jsoncode 的取用的方式更加的直接和便捷,直接使用 “$.json.b.www” 这样的取数路径,就能取出这个结构下的对应值。这种方式更适合我们在配置文件中配置出来所需要取的数据的对应的取数路径,统一化处理逻辑。取数据的语意上也比较明确和完整,方便描述。

建议:如果 json 中的几乎所有字典都要用到,直接使用 fastjson 的解析就很方便了。如果仅使用某一个或几个字段,或是包括一些基本的运算,那 jsoncode 的优势就完全体现出来啦!

此外,jsoncode 中还支持一些表达式功能(包括一些函数),欢迎大家访问:https://github.com/lujinfeifly/jsoncode

热门内容:SpringBoot 操作 ElasticSearch 详解(万字长文)
MySQL:互联网公司常用分库分表方案汇总
一招搞定GitHub下载加速!
Java项目构建基础:统一结果,统一异常,统一日志(好文推荐)
Kafka为什么这么快?
一线大厂的分布式唯一ID生成方案是什么样的?
JVM 史上最最最完整深入解析(12000 字噢)
硬货 | Redis 性能问题分析
Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。

什么?你还在使用fastjson,性能太差了相关推荐

  1. 5G WiFi的信号难题:穿墙性能太差

    首先得抱歉下,5G WiFi的稿子拖了这么久,宅客微信后台的更新俺都有看到,这篇来了. 接着上篇,我们从多方面对比了2.4GHz和5GHz WiFi的特点,因而得出了"因房制宜"的 ...

  2. ExtJS性能太差怎么办?

    随着用户体验要求越来越高,很多公司在使用ExtJS作为其前台开发框架, 也深受程序员的喜爱.因为ExtJS有其很多方面的优势,我下面列出几条 比较多的中文学习资料 界面漂亮 强大的控件库 但ExtJS ...

  3. “威胁”员工全来上班后,马斯克“尴尬”了:车没地停、工位不够坐、Wi-Fi 还太差

    点击蓝色"程序员黄小斜"关注我哟 加个"星标",每天和你一起多进步一点点! 整理 | 郑丽媛 出品 | 程序人生(ID:coder_life) "每一 ...

  4. 戴尔t20服务器主板性能好不好,戴尔电脑主板质量太差 建议谨慎购买(图)

    [赛迪网讯]2月1日消息,据国外媒体报道,有用户日前表示,购买戴尔计算机之前一定要三思而后行,因为其主板零部件质量实在太差. 如果一次是意外,二次是巧合,那么第三次可能就存在一定的必然性.该用户近日在 ...

  5. “威胁”员工全来上班后,马斯克“尴尬”了:车没地停、工位不够坐、Wi-Fi 还太差...

    Hollis的新书限时折扣中,一本深入讲解Java基础的干货笔记! 整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) "每一个特斯拉员工每周都要在办公室工作 40 个小时--如 ...

  6. 网站性能越来越差怎么办?

    新的一年,你的老板或客户,是否曾和你抱怨公司的网站性能愈来愈差?网站大家都会写,自从有了 Visual Studio 之后,连你家楼下的正妹小喵和隔壁的王大婶都会写 ASP.NET.但同样的一个画面, ...

  7. 手机闪存速度排行_手机很卡可能是只是因为闪存颗粒太差 EMMC UFS大对比

    原标题:手机很卡可能是只是因为闪存颗粒太差 EMMC UFS大对比 在经历了华为的"闪存门"事件以后,人们都开始关注关于手机内存的相关知识.那么所谓的EMMC和UFC到底有什么差别 ...

  8. ios浏览器滚动交互太差_使用ScrollMagic.js构建交互式滚动网站

    ios浏览器滚动交互太差 ScrollMagic is a jQuery plugin which lets you use the scrollbar like a playback scrub c ...

  9. 计算机水冷科学吗,差价一倍的水冷性能究竟差多少?真相让你大吃一惊!

    1小剧场:老黄买水冷竟遇兽王鄙视? [PConline 横评]老黄是我们编辑部出了名的隐形土豪,而且十分酷爱IT产品,尤其是耳机类,但土豪的脚步岂止于此?近日,老黄又在网上土豪地买了一个一体式水冷.. ...

最新文章

  1. mysql怎么在海量数据上ddl_浅谈MySQL Online DDL(中)
  2. ubuntu16.04 英文环境安装中文输入法
  3. [Python图像处理] 三十七.OpenCV直方图统计两万字详解(掩膜直方图、灰度直方图对比、黑夜白天预测)
  4. 监控工具—Prometheus—安装部署
  5. 地址栏 输入 参数 刷新参数丢失_小米11 Pro屏幕参数曝光:2K屏幕+120Hz刷新率
  6. 【git】IDEA下GitLab分支使用测试
  7. C++中的STL和MFC
  8. sklearn交叉验证2-【老鱼学sklearn】
  9. 牛客网OI题:序列划分
  10. java前端编译和后端编译理解
  11. 《3D数学基础:图形与游戏开发 》
  12. 一键恢复CGI v3.2.1.0 增强版
  13. 高频交易揭:美国五大高频易访录
  14. PayPal注册和认证说明,招商银行信用卡和牡丹国际借记卡
  15. 网管实战:为网络系统构建ISA防火墙
  16. redis应用之安装配置介绍
  17. Flash 与 VC 通讯
  18. 软件项目开发与管理(赢得值分析参考例题)
  19. 科普|云计算的四种服务模式介绍
  20. 基于Javaweb实现的微博系统

热门文章

  1. Codeforces Round #539 (Div. 2) C. Sasha and a Bit of Relax
  2. Sublime遇见中文乱码问题?
  3. css 背景样式学习
  4. Freemarker详细解释
  5. ORACLE分页SQL
  6. 将XML转为HTML
  7. 【怎样写代码】向现有类型“添加”方法 -- 扩展方法(三):为枚举类型创建方法
  8. 【怎样写代码】参数化类型 -- 泛型(四):泛型之类型参数约束
  9. tensorflow mnist 1
  10. 没有提示_华为手机发出莫名的提示音,打开什么也没有?原来是它们在作怪