【发布时间】:2013-08-20 13:19:47
【问题描述】:
我有非常具体的情况
我已经用 json 条目分隔文件:
{
"field": "value",
"field2": "#{Time.now + (24*60*60)).to_i.to_s}"
}
使用 IO.read(file) 加载此内容后,我想在该值中定义日期执行代码
如何做到这一点?
【问题讨论】:
我有非常具体的情况
我已经用 json 条目分隔文件:
{
"field": "value",
"field2": "#{Time.now + (24*60*60)).to_i.to_s}"
}
使用 IO.read(file) 加载此内容后,我想在该值中定义日期执行代码
如何做到这一点?
【问题讨论】:
我将使用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"}
【讨论】:
另一个答案更快
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
参考资料:
【讨论】: