2013-08-20 88 views
1

執行代碼的一部分,我有非常具體的情況紅寶石:如何從加載文件

我已經分居文件使用JSON條目:

{ 
     "field": "value", 
     "field2": "#{Time.now + (24*60*60)).to_i.to_s}" 
    } 

後,我用IO.read(文件)加載此內容我想執行代碼裏面的日期定義在該值

如何做到這一點?

回答

0

對方回答是更快

YAML.load(YAML.dump(hash)) 

我想你正在尋找的是Kernal#eval方法。這將運行包含在一個字符串中的代碼。

eval('2 + 2') # => 5 

您可能必須先運行正則表達式。看一個例子here at Rubular

/#{([^}]*)}/ 

一切都成定局。

json["field2"].gsub!(/#\{([^}]*)\}/) { eval($1) } 

如果你想在哈希的每一個值做到這一點。

json.each_value do |value| 
    v.gsub!(/#\{([^}]*)\}/) { eval($1) } 
end 

參考文獻:

+0

太棒了!非常感謝你:) – claveesh

1

我會做如下使用YAML

require 'yaml' 
require 'time' 
h = { 
     "field" => "value", 
     "field2" => "#{(Time.now + (24*60*60)).to_i.to_s}" 
    } 
p YAML.load(YAML.dump(h)) 
# => {"field"=>"value", "field2"=>"1377092990" 

require 'yaml' 
require 'time' 
h = { 
     "field" => "value", 
     "field2" => "#{Time.now}" 
    } 
p YAML.load(YAML.dump(h)) 
# => {"field"=>"value", "field2"=>"2013-08-20 19:23:12 +0530"} 
+0

你知道,當我在代碼中定義字符串時,一切正常,但問題是當我的字符串(json)從文件加載時 – claveesh