首页 » Web前端 » phpjson兼容技巧_更强的 JsonPath 兼容性及机能测试

phpjson兼容技巧_更强的 JsonPath 兼容性及机能测试

duote123 2024-12-13 0

扫一扫用手机浏览

文章目录 [+]

测了一圈之后,创造snack3兼容性良好,性能更是最好的。
晚上要喝点小酒庆祝一下!


免责声明:我也是个java新手,可能测试得办法不对而造成不科学的结果,可以留言指出来。
以下测试数值只对我的电脑有效(配置:Macbook pro 13 2018款 i7+16G+512G)。

phpjson兼容技巧_更强的 JsonPath 兼容性及机能测试

Snack3 借签了 Javascript 所有变量由 var 申明,及 Xml dom 统统都是 Node 的设计。
其下统统数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。

phpjson兼容技巧_更强的 JsonPath 兼容性及机能测试
(图片来自网络侵删)
强调文档树的操控和构建能力做为中间媒体,方便不同格式互转高性能Json path查询(兼容性和性能很赞)支持序列化、反序列化

本案测试用的三个框架及版本:

com.alibaba:fastjson:1.2.29com.jayway.jsonpath:json-path:2.2.0org.noear:snack3:3.1.5.9

三份测试数据样本:

A:{code:1,msg:'Hello world',data:{list:[1,2,3,4,5], ary2:[{a:2},{a:3,b:{c:'ddd'}}]}}B:[{b:{c:1}}, {b:{d:1}}, {b:{c:2}}, {b:{c:23}}]C:[{c:'aaaa'}, {b:'cccc'}, {c:'cccaa'}]测试方案:

1.测试伪代码

var text = "...";//1.预解析jsonvar obj = JSON.parse(text);long start = System.currentTimeMillis();for(int i=0,len=1000000; i<len; i++) { //2.实行json path JSONPath.eval(obj,"$..."); }//3.100万次的花费韶光(记录的数值便是这个)long times = System.currentTimeMillis() - start;System.out.println(times);

2.每个框架、每个表达式各实行4次,并记录后3次花费韶光

3.末了制成比拟表格

4.测试结果:

注:

不兼容1 : 直接返回了根节点自己不兼容2 : 直接非常总结fastjson 毫无兼容性可言(从兼容json-path的角度讲)json-path 性能不理想,函数利用局限性大snack3 性能最好,支持两种策略:1.标准模式,保持与json-path兼容效果;2.非标准模式,函数利用余地更大附1:snack3项目地址:https://github.com/noear/snack3https://gitee.com/noear/snack3附2:..及函数表达式的兼容性解释

json-path:(snack3的标准模式同),处理策略如下:

选择器的实行顺序:(括号里的表达式处理后再聚合)$..(ary2[0].a)$..(c.min()) //如果c不是数组,此处会出错$..(ary2[0][0])只能:data.list[?(@ in $..ary2[0].a)]只能:在原数组节点上实行函数

snack3:(snack3的非标准模式),处理策略如下:

选择器的实行顺序:(括号里的表达式处理后再聚合)($..ary2[0]).a($..c).min() //c是不是数组都正常 //实际利用中,这种会更方便,同时也兼容其它表达式($..ary2[0])[0] //这种会引起不同的结果 //不过实际中极少涌现可以:data.list[?(@ in $..ary2[0].a)] 或 data.list[?(@ == $..ary2[0].a[0])]可以:在原数组节点上实行函数 或 查询结果上实行附3:测试代码com.alibaba:fastjson 测试代码:https://gitee.com/noear/snack3/blob/master/snack3_demo/src/test/java/speed/SpeedFastjsonJsonPathTest.javacom.jayway.jsonpath:json-path 测试代码:https://gitee.com/noear/snack3/blob/master/snack3_demo/src/test/java/speed/SpeedJaywayJsonPathTest.javaorg.noear:snack3 测试代码:https://gitee.com/noear/snack3/blob/master/snack3_demo/src/test/java/speed/SpeedJsonPathTest.java
标签:

相关文章

汕尾学IT,崛起的科技人才培养高地

近年来,随着我国互联网产业的蓬勃发展,对IT人才的需求日益旺盛。在众多城市中,汕尾凭借其独特的区位优势和政策扶持,逐渐成为科技人才...

Web前端 2024-12-15 阅读0 评论0

柠檬咖IT,引领科技创新,助力产业升级

随着我国经济的快速发展,科技创新已成为推动产业升级的关键驱动力。在这其中,柠檬咖IT作为一家专注于信息技术领域的企业,凭借其领先的...

Web前端 2024-12-15 阅读0 评论0

电钻Tit,打造高效家居生活的得力助手

随着科技的不断发展,家用电器的种类日益丰富,其中电钻作为一款不可或缺的工具,已经在我们的生活中扮演着越来越重要的角色。本文将以电钻...

Web前端 2024-12-15 阅读0 评论0

线上IT教育,新时代人才培养的新引擎

随着互联网技术的飞速发展,线上教育逐渐成为新时代人才培养的重要途径。在众多线上教育领域,IT教育因其独特的魅力和广阔的发展前景,成...

Web前端 2024-12-15 阅读0 评论0