3

json1:

{
    "Name1" : "Value1",
    "Name2" : "<%= Value2 %>"
}

Value2 正在调用一个读取 json2 并给出输出的方法。

ERB.new(File.read("json1.json")).result给我第二个 json 文件的输出,而不是 json1.

我不知道如何用第二个 json 的输出替换值 2。有没有办法可以将已经评估的 json 的值传递给 Value2?

4

1 回答 1

2

这显示了您的问题:

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"

代码开始看起来很难看,所以你可能想要抽象它(特别是如果你事先不知道嵌套有多深,所以你会想要生成变量名)

于 2013-04-08T08:41:13.313 回答