【问题标题】:Generating json structures using ERB template使用 ERB 模板生成 json 结构
【发布时间】:2013-03-29 21:31:27
【问题描述】:
Json1:
{
"Name1" : "Value1",
"Name2" : "<%= Value2 %>"
}
Value2 正在调用一个读取 json2 并给出输出的方法。
ERB.new(File.read("json1.json")).result 给我第二个 json 文件的输出,而不是 json1。
我不知道如何将值 2 替换为第二个 json 的输出。有没有办法可以将已经评估的 json 的值传递给 Value2?
【问题讨论】:
标签:
ruby-on-rails
ruby
json
file
osx-mountain-lion
【解决方案1】:
这表明你的问题:
ERB.new( "foo bar <%= ERB.new( 'baz' ).result %>" ).result
=> "baz"
这与 JSON 无关。这是因为 ERB 不会自动嵌套,这取决于模板的评估方式。它附加到一个名为:_erbout 的变量上,不同的ERB 对象将使用相同的变量。当您想按顺序构建结构时很好,但对于嵌套包含来说不是很好。
您可以通过告诉 ERB 在生成输出时使用不同的命名变量来解决您的问题:
ERB.new( "foo bar <%= ERB.new( 'baz', nil, nil, :_erbout2 ).result %>", nil, nil, :_erbout1 ).result
=> "foo bar baz"
代码开始看起来很难看,因此您可能需要对其进行抽象(尤其是如果您事先不知道嵌套的深度,因此您需要生成变量名称)