Ruby:如何从加载的文件中执行部分代码

时间:2013-08-20 13:19:47

标签: ruby json file load

我有非常具体的情况

我用json条目分隔文件:

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

使用IO.read(文件)加载此内容后,我想在内部执行代码,并在该值中定义日期

怎么做?

2 个答案:

答案 0 :(得分: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"}

答案 1 :(得分: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

参考文献: