Durch einen Tweet von @rb2k wurde ich auf zwei Bibliotheken
aufmerksam, die schnelles Parsen von JSON- oder
XML-Strings und Dumpen von Strings ermöglichen. Außerdem können
damit auch Objekte in entsprechende Formate konvertiert werden.
Die Bibliotheken wurden von Peter Ohler (@ohler55) geschrieben.
Oj
Diese Library ist für JSON zuständig. Natürlich kann diese auch durch ein
$ gem install oj
installiert werden, da diese auf RubyGems gehostet ist. Wenn ich mir die Benchmarks dazu ansehe, sieht man schon einen gewaltigen Unterschied:
Summary:
System time (secs) rate (ops/sec)
------- ----------- --------------
Oj::Doc 0.094 1059995.760
Ruby 0.503 198851.434
Comparison Matrix
(performance factor, 2.0 row is means twice as fast as column)
Oj::Doc Ruby
------- ------- -------
Oj::Doc 1.00 5.33
Ruby 0.19 1.00
Hinweis: Dies ist aber nicht für einen eindeutigen Vergleich ausreichend. Weitere Benchmarks sind in der README
dargestellt.
Beispiel: Writing and Parsing
``` ruby require 'oj'
h = { 'one' => 1, 'array' => [ true, false ] } json = Oj.dump(h)
json =
{
"one":1,
"array":[
true,
false
]
}
h2 = Oj.load(json) puts "Same? #{h == h2}"
true
```
Ox
Diese weitere Bibliothek ist nicht für JSON zuständig, sondern für XML. Auch diese kann durch ein
$ gem install ox
von RubyGems installiert werden. Als Vergleich wurden verschiedene Gems hinzugezogen:
Gem | parse | to_s
Nokogiri | 3.56 seconds | 7.03 seconds
LibXML | 3.67 seconds | 0.67 seconds
Ox | 1.90 seconds | 0.33 seconds
Beispiel: Object Dump
An dem unten stehenden Beispiel kann man erkennen, dass die API einfach zu benutzen ist.
``` ruby require 'ox'
class Sample attr_accessor :a, :b, :c
def initialize(a, b, c)
@a = a
@b = b
@c = c
end end
Create Object
obj = Sample.new(1, "bee", ['x', :y, 7.0])
Now dump the Object to an XML String.
xml = Ox.dump(obj)
Convert the object back into a Sample Object.
obj2 = Ox.parse_obj(xml) ```