Claus Witt

Just like when parsing json in ruby you need to require the json library to write hashes and arrays to json strings. Unlike Javascript and PHP you don't call a function with one parameter representing the data you want to convert to json - instead you can call to_json on the object you want to convert.

require 'json'
data = {"name"=>"Claus Witt", "ideas"=>["idea one", "idea two"]}
puts data.to_json

For built-ins this works out of the box. For your own classes though - you need to implement a method called as_json as well as to_json. This enables your object to be directly written to json - but also lets it be nested within e.g. a hash or an array. The to_json should pretty much just call to_json on the as_json output.

require 'json'
class Test
  def as_json(options = { })
    {
      "this" => "is a test"
    }
  end
  def to_json(*a)
    as_json.to_json(*a)
  end
end

puts Test.new.to_json
test = {a: Test.new}
puts test.to_json

Recent posts