我愿做这样的事情:如何将Ruby对象转换成JSON
require 'json'
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
这可能吗?
我愿做这样的事情:如何将Ruby对象转换成JSON
require 'json'
class Person
attr_accessor :fname, :lname
end
p = Person.new
p.fname = "Mike"
p.lname = "Smith"
p.to_json
这可能吗?
试试吧。如果您使用的是Ruby on Rails(并且标签上显示您是这样),我认为这个确切的代码应该已经工作了,而不需要任何东西。
Rails支持来自控制器的JSON输出,因此它已经引入了您将需要的所有JSON序列化代码。如果您打算通过输出控制器这个数据,你也许能够仅通过写
render :json => @person
是的,你可以做到这一点与to_json
,以节省时间。如果你不运行Rails,你可能需要require 'json'
。
对于Rails,没有必要使用'require'json'',但是对于普通的Ruby代码来说,它可能是必需的。 [JSON是Ruby标准库的一部分](https://ruby-doc.org/stdlib/libdoc/json/rdoc/index.html),所以它带有语言。 – 2017-05-17 21:00:15
为了让您的Ruby类JSON友好而不触及Rails的,您可以定义两种方法:
to_json
,它返回一个JSON对象as_json
,返回对象当你的对象正确既响应to_json
和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"
# }
# }
人有什么关联? – Sash 2013-12-19 13:27:54
这个答案只适用于Rails项目。香草红宝石怎么样? – cevaris 2014-10-19 01:20:17
我会说它甚至不适用于Rails ..它只适用于轨道应用程序内的控制器..范围非常有限。 – baash05 2015-05-07 07:55:59