使用Oj来操作你的json
看到几个项目的源码在操作json时都选择了Oj,今天有空看下对比ruby或者rails中提供的方式有什么优势。
github上介绍很自信,也很简单,就是快。(A fast JSON parser and Object marshaller as a Ruby gem.)
我们先把知道的几种方法列举一下,基本操作就是转化成json和解析json:
1. 使用Oj工具
h = { 'one' => 1, 'array' => [ true, false ] }
json = Oj.dump(h) # hash解析成json
h2 = Oj.load(json) # json解析成hash
#示例:
a = Oj.dump({a: 1, b: 2}) #=> "{\"a\":1,\"b\":2}"
Oj.load(a) #=> {"a"=>1, "b"=>2}
2. rails提供的ActiveSupport::JSON, 同样使用上面的示例:
a = ActiveSupport::JSON.encode({a: 1, b: 2}) #=> "{\"a\":1,\"b\":2}"
ActiveSupport::JSON.decode(a) #=> {"a"=>1, "b"=>2}
3. ruby提供的JSON解析对象:
require "json"
a = JSON.generate({a: 1, b: 2}) #=> "{\"a\":1,\"b\":2}"
JSON.parse(a) #=> {"a"=>1, "b"=>2}
简单对比3种方式的benckmark的结果:
require 'benchmark'
require "json"
n = 5000
Benchmark.bmbm do |x|
x.report { n.times { Oj.load("{\"a\":1,\"b\":2}") } }
x.report { n.times { ActiveSupport::JSON.decode("{\"a\":1,\"b\":2}") } }
x.report { n.times { JSON.parse("{\"a\":1,\"b\":2}") } }
end
结果显示Oj的解析速度是最快的,ActiveSupport::JSON的解析速度最慢,在开发环境的系统中相差近5倍(更好的硬件环境下可能差距会更大),所以建议选择使用Oj作为系统操作json的工具。
Rehearsal ----------------------------------------------------------------------
parse by Oj 0.090000 0.000000 0.090000 ( 0.115041)
parse by Rails ActiveSupport::JSON 0.210000 0.010000 0.220000 ( 0.237688)
parse by Ruby JSON 0.150000 0.010000 0.160000 ( 0.151802)
------------------------------------------------------------- total: 0.470000sec
user system total real
parse by Oj 0.070000 0.000000 0.070000 ( 0.072395)
parse by Rails ActiveSupport::JSON 0.260000 0.010000 0.270000 ( 0.346393)
parse by Ruby JSON 0.170000 0.010000 0.180000 ( 0.196502)
查看评论...