查看原文
其他

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

作者:陆小飞  
链接: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() // 使用fastjson  
JSONObject ob = JSON.parseObject(json).getJSONObject("json").getJSONObject("b");  
return ob.getString("www");  
}  

public static String usejsoncode() // 使用jsoncode  
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


-End-


加小编微信:xiaobaito,免费获取一份架构师资料。还可以邀请加入咱们的「菜鸟架构」技术群一起讨论技术,禁止发广告及垃圾信息哦。


热门阅读

免费获取一份架构资料!Nginx为什么快到根本停不下来?Spring中经典的9种设计模式,要记住啊!微盟七天七夜找回删库数据
GitHub 50000+ Star 登顶,命令行艺术!
除了负载均衡,Nginx 能做的真强大!
如何搭建自己的技术架构,说得太好了!
被问懵了,什么是红黑树?

更多请关注“菜鸟架构”公众号,将不断呈现更多架构干货!



给个在看,谢谢老板!

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存