什么?你还在使用fastjson,性能太差了

【笔记】2022.6.7 数据分析概论 已完结 阅读详情

陆小飞

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

推荐阅读:
Ngxix | 超详细!Nginx 日志配置实
HTTP客户端连接,选择HttpClient还是OkHttp?
为什么建议使用你 LocalDateTime ,而不是 Date?
答应我,别再写上千行的类了好吗
好文!必须点赞
LangGraph的容错机制:从节点失败到图级回滚 核心概念铺垫:讲解LLM应用容错与事务性的核心概念(幂等性、重试策略、降级策略、快照、回滚、原子性、一致性、隔离性、持久性、最终一致性),对比LangGraph容错机制与传统数据库ACID事务、Apache Airflow/Kubernetes Workflow/Kubeflow Pipelines容错机制的异同;LangGraph容错机制的演进历史:用markdown表格梳理LangGraph从0.0.1到1.5.0(截止202X年X月)的容错机制发展历程;节点级别的容错:重试与降级。 阅读详情

相关推荐

单细胞多组学数据整合分析实战:从原始数据到跨平台合并

本文详细介绍了单细胞多组学数据整合分析的实战流程,从原始数据处理到跨平台合并分析。通过Seurat和Harmony等工具的应用,帮助研究者有效解决批次效应问题,保留真实的生物学信号。文章包含代码示例和常见问题解决方案,特别适合需要进行单细胞合并分析的研究人员参考。

weixin_30752699的博客 92

fastjson 替换超大的JSON对象中的key优化

遇到一个处理超大json(接近2w行)的问题,原有处理代码效率比较低下,耗时10几秒,业务要求耗时越短越好。因为json非常长,原来对value进行解析的逻辑是逐个字段进行正则匹配判断是否是月份,所以导致效率非常低。优化以后建立映射字段,存储月份对应的码值,遇到对应码值直接返回,原来正则表达式没有进行预编译,所以效率低下。思维转换:一般的思维是遍历json的所有字段,对符合条件的进行转换,但是效率低下,还有大量的正则匹配操作。逆向思维,只对配置中指定的字段进行转换,非配置中的直接跳过,可以大幅提升速度。

ByteX的博客 551

​基于stm32的智能空气加湿器设计(含源代码和Proteus仿真)

课程设计分享

LoongSTUDIO的博客 2929

FastJson耗时

FastJson代码质量不是很高,容错率不如Jackson和Gson;但速度的确比Jackson和Gson快。但调试代码时发现FastJson耗时严重,研究之后发现FastJson第一次执行时,因为初始化的原因的确很慢,一个简单JsonString转JsonObject都需100ms,但之后再次执行时速度就很快了。而且测试表明1.2.9版本的初始化比1.2.4快30%,建议及时更新FastJson版本。 给个例子体会: long startTime = System.currentTi

haoranhaoshi的博客 3850

国标Gb28181里Contact和Route的使用

国标Gb28181是基于Sip协议的,因此对Contact和Route的使用,也可以说是Sip里Contact和Route的使用。Contact和Route则是sip协议里的头字段。 现在,在使用国标Gb28181来做项目时,经常会遇到这种情况,国标的下级是在内网里,上级在公网上。如果不做处理,下级到上级会经过nat协议的转换从而导致上级向下级发送请求时(比如获取目录请求)不能到达

wwyyxx26的专栏 5512

VTK的编译和部署,配合c++和visual studio2022,VTK开发环境的配置

在官网选择最新的版本下载之后进行解压,然后再里面创建build目录,方便后面使用cmake进行编译。

dz131lsq的博客 3223

研究使用FastJson把Java对象转JsonObject的效率问题,以及改进方案。

构造了一个稍微复杂的Java对象对比在不同情况下的转换效率,都是循环20次执行。https://gitee.com/icefire11/test-fast-json 概述: Main方法示例: import com.alibaba.fastjson.JSONObject; public class Test { public static void main(String[] args) { School school = new School(); lon

十年饮水不凉热血 4491

保姆级教程:用Comsol Multiphysics仿真你的第一个SAW滤波器(含压电材料参数设置)

本文提供了一份详细的COMSOL Multiphysics教程,指导读者完成表面声波滤波器(SAW)的压电仿真全流程。从压电材料参数设置、叉指换能器建模到多物理场耦合分析,特别强调了实际应用中容易出错的细节和解决方案,帮助工程师快速掌握SAW滤波器仿真技术。

weixin_42665255的博客 593

性能优化之解析:fastJson快速解析大数据json

fastJson快速解析大数据。

ServiceGood的博客 2万+

IgH EtherCAT 从入门到精通:第 5 章 多主站与系统集成配置

本文介绍了 EtherCAT 多主站配置与系统集成方法。主要内容包括: 多主站实例配置原理:通过内核模块参数指定多个主站设备,每个主站独立管理一条 EtherCAT 总线,最多支持32个主站实例。 配置文件详解:在/etc/ethercat.conf中通过MASTER<X>_DEVICE变量定义各主站绑定的网卡或MAC地址,支持冗余备份配置。 系统服务集成:提供了systemd服务单元文件和传统init.d脚本两种方式实现开机自启动和管理,并建议通过override文件定制服务依赖关系。 架构示

从事嵌入式linux android驱动开发,拥有全栈能力 355

Python 爬虫实战:微博自动化运营工具(点赞 / 转发 / 评论 + 反封号策略)

微博作为中国最大的社交媒体平台之一,拥有庞大的用户群体和丰富的数据资源。通过 Python 爬虫技术,我们可以实现微博的自动化运营,包括点赞、转发、评论等功能,同时采取有效的反封号策略,确保账号的安全和稳定运行。

u014481728的博客 1179

接口响应时序列化过慢的解决方案

一、背景: 我们SpringBoot的项目中,偶尔会发生api接口响应时序列化过慢的情况。 经过试验分析,出现该情况与项目中不当使用Jackson序列化有关。 二、问题分析: 首次,我们在http请求时Spring mvc的消息转化器,会对出入参进行Jackson方式的序列化, 而Jackson的序列化存在着synchronized(this)同步代码块,及锁的是ObjectMapper对象。 O...

weixin_39180604的博客 3090

【C2000系列DSP的Bootloader详解】实现过程、流程图与示例代码

C2000 Bootloader 的核心逻辑可概括为 “初始化→选模式→加载程序→校验→跳转” 五步。对于小白来说,无需纠结底层寄存器配置(驱动库已封装),重点理解 “启动流程” 和 “数据传输 + 校验” 的核心思想即可。 通过本文的流程图和示例代码,相信你已经掌握了 C2000 Bootloader 的核心原理。实际开发中,可基于 TI 提供的 Bootloader 示例(C2000Ware 中自带)进行修改,快速适配自己的硬件和应用场景。

昔时扬尘处 376

fastjson配置时间_什么?你还在使用fastjson,性能太差了

在现代的整个互联网的交互通信中,json 表达的简洁性和文本化的特性给我们带来很大的操作便捷性。所以大量的通信都使用这种表达方式。但是对于 json 方式,大家有比较多的解析方式,其中阿里开源的 fastjson 相信是我们大家使用最多的一种。但是我们现在有一种更好的解析方式 ----jsoncode,maven 包引用是这样的:<dependency> <groupId>...

weixin_35825858的博客 275

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

fastjson java 字段排序_什么?你还在使用fastjson,性能太差了

在现代的整个互联网的交互通信中,json 表达的简洁性和文本化的特性给我们带来很大的操作便捷性。所以大量的通信都使用这种表达方式。但是对于 json 方式,大家有比较多的解析方式,其中阿里开源的 fastjson 相信是我们大家使用最多的一种。但是我们现在有一种更好的解析方式 ----jsoncode,maven 包引用是这样的:<dependency> <groupId>...

weixin_30232751的博客 121

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

纳尼?你居然还在使用fastjson,性能太差了,这个新出的秒杀fastjson

作者:陆小飞 链接:https://www.jianshu.com/p/eeba48f1e563在现代的整个互联网的交互通信中,json表达的简洁性和文...

emprere的博客 300

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java+fastjsongithub_你还在使用fastjson,性能太差了

陆小飞https://www.jianshu.com/p/eeba48f1e563在现代的整个互联网的交互通信中,json 表达的简洁性和文本化的特性给我们带来很大的操作便捷性。所以大量的通信都使用这种表达方式。但是对于 json 方式,大家有比较多的解析方式,其中阿里开源的 fastjson 相信是我们大家使用最多的一种。但是我们现在有一种更好的解析方式 —-jsoncode,maven 包引用...

weixin_34348050的博客 468

java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比

我们为什么要序列化 举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放。那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列化。我们要用的时候,就需要将字节流重构成对象,这叫反序列化。不知道我这么说大家能不能理解。 java序列化的缺点 java自己提供序列化而且用起来也非常简单,但是在远程服务调用中很少用...

qq_39158142的博客 1450

Fastjson疑似又出现安全漏洞

昨天,Fastjson发布了最新1.2.67版本,经过内部安全人员分析研究,本次发布属于重大安全问题更新,小于1.2.67版本的Fastjson存在远程代码执行漏洞,可导致直接获取服务器权限。该漏洞利用门槛低,漏洞利用原理可能会被短时间内研究并公开,风险影响范围较大。 漏洞影响范围: Fastjson version < 1.2.67 修复方案: 建议升级Fastjso...

灵熙云工作室 5244

java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比...

我们为什么要序列化举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放。那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列化。我们要用的时候,就需要将字节流重构成对象,这叫反序列化。不知道我这么说大家能不能理解。java序列化的缺点java自己提供序列化而且用起来也非常简...

WGH100817的博客 279

Java性能优化-1

java性能优化1

hixiaoxiaoniao的专栏 374
上一篇: Ngxix | 超详细!Nginx 日志配置实践
下一篇: JSON Web 令牌(JWT)是如何保护 API 的??
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值