json1:
{
"Name1" : "Value1",
"Name2" : "<%= Value2 %>"
}
Value2 正在调用一个读取 json2 并给出输出的方法。
ERB.new(File.read("json1.json")).result
给我第二个 json 文件的输出,而不是 json1.
我不知道如何用第二个 json 的输出替换值 2。有没有办法可以将已经评估的 json 的值传递给 Value2?
json1:
{
"Name1" : "Value1",
"Name2" : "<%= Value2 %>"
}
Value2 正在调用一个读取 json2 并给出输出的方法。
ERB.new(File.read("json1.json")).result
给我第二个 json 文件的输出,而不是 json1.
我不知道如何用第二个 json 的输出替换值 2。有没有办法可以将已经评估的 json 的值传递给 Value2?
这显示了您的问题:
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"
代码开始看起来很难看,所以你可能想要抽象它(特别是如果你事先不知道嵌套有多深,所以你会想要生成变量名)