我願做這樣的事情:如何將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