我有非常具体的情况
我用json条目分隔文件:
{
"field": "value",
"field2": "#{Time.now + (24*60*60)).to_i.to_s}"
}
使用IO.read(文件)加载此内容后,我想在内部执行代码,并在该值中定义日期
怎么做?
答案 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
参考文献: