當我在我的項目加載了Rails的控制檯,我可以這樣做:NoMethodError:未定義的方法`from_json」爲‘{}’:字符串
{}.to_json
但我不能這樣做:
"{}".from_json
即使我首先需要json寶石,它也不起作用。 from_json
方法是否存在?
當我在我的項目加載了Rails的控制檯,我可以這樣做:NoMethodError:未定義的方法`from_json」爲‘{}’:字符串
{}.to_json
但我不能這樣做:
"{}".from_json
即使我首先需要json寶石,它也不起作用。 from_json
方法是否存在?
第from_json
不存在。如果您想從JSON字符串獲取Ruby哈希,可以使用JSON#parse
方法。下面的示例:
json = JSON.parse("{\"hello\": \"world\"}")
以上的回報{"hello"=>"world"}
你{}.to_json
的假設是正確的。但是,當我們將JSON數據(或任何文本數據)轉換爲某種本地結構時,我們稱之爲進程解析。解析一些文本數據並使用該數據初始化其屬性的類的實例方法很奇怪 - 有點不合適。相反,您通常會看到的是靜態工廠方法(在Ruby中稱爲類方法),如下所示:
JSON.parse "{}"
這將在Ruby中返回散列值。
不,如下面和上面提到的,方法不存在。但它有點簡單,你自己實現:
require 'json'
class String
def from_json
JSON.load(self) rescue false
end
end
只發生在這個。 from_json現在在框架中。
從文檔...
class Person
include ActiveModel::Model
include ActiveModel::AttributeMethods
include ActiveModel::Serializers::JSON
attr_accessor :name, :age, :awesome
def attributes=(hash)
hash.each do |key, value|
send("#{key}=", value)
end
end
def attributes
instance_values
end
end
我一般用它來序列化JSON加載ActiveModel到對象......
json.each do |object|
object = object.to_json
myModel = MyModel.new
myModel.from_json(object)
end
的錯誤報告是有點壞的 「from_json」 的方法,如果我正在處理格式錯誤的JSON,我會得到未定義的方法錯誤。
年後,HTH!
但from_json將是String的一個實例方法,而不是Hash或Array,所以它不會初始化它自己的屬性,而是一個Hash或Array的屬性。我不明白爲什麼會這麼奇怪。 – Rits
如果你真的想要這個功能(也許作爲DSL的一部分或爲了方便),你可以擴展'String'來添加它。工廠方法'JSON.parse'是軟件開發中的一種典型模式,這就是爲什麼您會看到而不是'String#from_json'。 – cfeduke
好吧,謝謝,接受克里斯的回答,但提高你的 – Rits