Ruby有許多與JSON相關的庫。下面的例子結合使用了Ruby和JSON。
~~~
require 'json'
class Address
attr_accessor :line1, :city, :state_or_province,
:zip_or_postal_code, :country
def initialize(line1='', city='', state_or_province='',
zip_or_postal_code='', country='')
@line1 = line1
@city = city
@state_or_province = state_or_province
@zip_or_postal_code = zip_or_postal_code
@country = country
end
def to_json
to_hash.to_json
end
def from_json!(str)
JSON.parse(str).each { |var, val| send("#{var}=", val) }
end
private
def to_hash
Hash[instance_variables.map { |var| [var[1..-1].to_sym,
send(var[1..-1])] }]
end
end
~~~
JSON gem的to*json方法將字符串或哈希值轉換為JSON。 Address對象的to*json方法通過將它的數據成員轉換為哈希值,然后調用to_json的散列來轉換地址對象為JSON。為了將地址轉換為JSON,請參考下面的列子:
~~~
addr1 = Address.new('555 Main Street', 'Denver', 'CO', '80231', 'US')
puts addr1.to_json
# Outputs the following …
{"line1":"555 Main Street","city":"Denver","state_or_province":"CO","zip_or_postal_code":"80231","country":"US"}
~~~
JSON gem的JSON.parse方法將一個JSON字符串轉換為哈希值。地址對象的from_json!方法接收一個JSON字符串,然后調用JSON.parse轉換為一個Hash值,并且按照以下方式設置每一個來自哈希的對應數據成員:
~~~
json_addr = <<END
{
"line1" : "999 Broadway", "city" : "Anytown",
"state_or_province" : "CA", "zip_or_postal_code" : "90210",
"country" : "USA"
}
END
addr2 = Address.new
addr2.from_json!(json_addr)
~~~