如何将Ruby对象转换为JSON

我想做这样的事情:

require 'json' class Person attr_accessor :fname, :lname end p = Person.new p.fname = "Mike" p.lname = "Smith" p.to_json 

可能吗?

是的,你可以用to_json

如果你没有运行Rails,你可能需要require 'json'

试试吧。 如果你正在使用Ruby on Rails(并且标签说你是),我认为这个确切的代码应该已经可以工作,而不需要任何东西。

Rails支持来自控制器的JSON输出,因此它已经提取了您将需要的所有JSON序列化代码。 如果您计划通过控制器输出此数据,则可以通过编写来节省时间

 render :json => @person 

要在不触及Rails的情况下使Ruby类具有JSON友好性,您需要定义两种方法:

  • to_json ,返回一个JSON对象
  • as_json ,返回对象的哈希表示

当你的对象对to_jsonas_json都做出正确的响应时,即使它嵌套在其他标准类(如Array和/或Hash)的as_json ,它也可以正常运行:

 #!/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" # } # } 

另请参阅“ 在嵌套对象中使用自定义to_json方法 ”。