DSIW

Alles was interessant ist... (Linux, Programmierung, Datenschutz, Medien, uvm.)

Schnelle JSON- und XML-Libraries für Ruby

| Comments

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) ```

Weitere Informationen

Comments