2011-07-27 68 views

回答

4

from_json不存在。如果您想從JSON字符串獲取Ruby哈希,可以使用JSON#parse方法。下面的示例:

json = JSON.parse("{\"hello\": \"world\"}")

以上的回報{"hello"=>"world"}

2

{}.to_json的假設是正確的。但是,當我們將JSON數據(或任何文本數據)轉換爲某種本地結構時,我們稱之爲進程解析。解析一些文本數據並使用該數據初始化其屬性的類的實例方法很奇怪 - 有點不合適。相反,您通常會看到的是靜態工廠方法(在Ruby中稱爲類方法),如下所示:

JSON.parse "{}" 

這將在Ruby中返回散列值。

+0

但from_json將是String的一個實例方法,而不是Hash或Array,所以它不會初始化它自己的屬性,而是一個Hash或Array的屬性。我不明白爲什麼會這麼奇怪。 – Rits

+0

如果你真的想要這個功能(也許作爲DSL的一部分或爲了方便),你可以擴展'String'來添加它。工廠方法'JSON.parse'是軟件開發中的一種典型模式,這就是爲什麼您會看到而不是'String#from_json'。 – cfeduke

+0

好吧,謝謝,接受克里斯的回答,但提高你的 – Rits

0

不,如下面和上面提到的,​​方法不存在。但它有點簡單,你自己實現:

require 'json' 
class String 
    def from_json 
    JSON.load(self) rescue false 
    end 
end 
0

只發生在這個。 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!

相關問題