I would like to do something like this:
require 'json' class Person attr_accessor :fname, :lname end p = Person.new p.fname = "Mike" p.lname = "Smith" p.to_json
Is it possible?
The Marshal Module As Ruby is a fully object oriented programming language, it provides a way to serialize and store objects using the Marshall module in its standard library. It allows you to serialize an object to a byte stream that can be stored and deserialized in another Ruby process.
JSON (JavaScript Object Notation) is a lightweight data interchange format. Many web applications use it to send and receive data. In Ruby you can simply work with JSON. At first you have to require 'json' , then you can parse a JSON string via the JSON. parse() command.
Yes, you can do it with to_json
.
You may need to require 'json'
if you're not running Rails.
To make your Ruby class JSON-friendly without touching Rails, you'd define two methods:
to_json
, which returns a JSON objectas_json
, which returns a hash representation of the objectWhen your object responds properly to both to_json
and as_json
, it can behave properly even when it is nested deep inside other standard classes like Array and/or Hash:
#!/usr/bin/env ruby require 'json' class Person attr_accessor :fname, :lname def as_json(options={}) { fname: @fname, lname: @lname } end def to_json(*options) as_json(*options).to_json(*options) end end p = Person.new p.fname = "Mike" p.lname = "Smith" # case 1 puts p.to_json # output: {"fname":"Mike","lname":"Smith"} # case 2 puts [p].to_json # output: [{"fname":"Mike","lname":"Smith"}] # case 3 h = {:some_key => p} puts h.to_json # output: {"some_key":{"fname":"Mike","lname":"Smith"}} puts JSON.pretty_generate(h) # output # { # "some_key": { # "fname": "Mike", # "lname": "Smith" # } # }
Also see "Using custom to_json method in nested objects".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With