比阿里巴巴fastjson更快的解析方法!

问题: 

      在一个缓存抓取的项目中,大量http请求返回大量json格式数据,json的解析变得非常慢,解析速度跟不上

http返回的速度。


解决办法:

      1.升级配置  (业务需求是缓存越快越好,不适合)

      2换一种解析json的方式(阿里的fastjson速度已经属于前列).

      

最后:换一种解析json的方式 

      由于很忙,长的博客很少人爱看,我在这里就简单说一下我怎么想的,怎么做的。fastjson的使用大家都是知道的,json字符串转换成fastobject对象后就可以用了,具体就是用java的反射把json反射成对象,然后用get方法获取对应的属性值,如果要转化的json是很大的话(2M左右的json)就很慢了,小伙伴可以打个debug体验一下.

       我所想到的办法就是截取字符串。也许你会说String类提供的截取放法,你去截取长字符串就很麻烦了,截取json数据,你不要开玩笑了。你怎么截取?

       首先我先说明一下。只要是json数据,它就是固定的排列规则, 如果排列规则不对,那么他就不是json!简单的例子如下:

{"url":"www.www.com","name":"json数据","array":{"JSON校验":"hello","Cron生成":"hello","JS加密解密":"hello"},"boolean":true,"null":null,"number":123,"object":{"a":"b","c":"d","e":"f"}}

它的规则是这样的:             

1.一个值肯定是key和value的形式表达在字符串中,key一定是“key”:   的形式表达的,那么key的value一定就是:"value" 的形式来表达的

2.相邻的两个key值,中间肯定是有 "," 的存在

3.一个key数组一定是["str1","str2","str3"]的存在

首先我们来罗列一下使用fastjson解析json的过程如下:

获取json------>转换fastjson对象----->一get("key")获取值

在这个过程中你不难发现,你想要得到的值,你是肯定知道对应的key的,我们可以用你知道的key来准确定位对应的value在json字符串中准确的位置。

        String json=".......";

        json.indexOf("\""+key+"\""); 

具体怎样获取value和处理复杂的数组以及value中带有特殊符号的方法,大家可以看我的源码。此方法经中用到的算法都是串行的,经过测试,以及我在实际中的应用,速度至少比fastjson要快上2倍,json数据越大此方法的优势就越明显,而且cpu的消耗也是非常低的,如果你愿意加入并行算法也可以的,当然这也是我以后的想法,源码很简单就是普通的java项目,没有任何第三方的依赖,已经上传到github上大家可以去下载,或者提出建议。https://github.com/jiaowowenrou/JumperJsonXml                       

                          

     


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值