1

我有非常具体的情况

我已经用 json 条目分隔了文件:

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

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

这个怎么做?

4

2 回答 2

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"}
于 2013-08-20T13:50:24.820 回答
0

另一个答案更快

YAML.load(YAML.dump(hash))

我认为您正在寻找的是Kernal#eval方法。这将运行包含在字符串中的代码。

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

您可能必须先运行正则表达式。请参阅Rubular 此处的示例

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

都说了又做了。

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

如果您想对哈希中的每个值执行此操作。

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

参考:

于 2013-08-20T13:29:53.590 回答