如何用胡子用任意键渲染json?

时间:2011-04-06 11:57:59

标签: ruby templates mustache

我有一个JSON对象,如下所示:

{
    "XXX":{"name":"First"},
    "YYY":{"name":"Second"},
    ....
}

我需要渲染它看起来像:

<div>
    <h1>XXX</h1>
    <p>First</p>
</div>
<div>
    <h1>YYY</h1>
    <p>Second</p>
</div>
....

如何使用Mustache完成此操作?我面临的问题是我不知道如何引用这些项,因为键名是任意的。

1 个答案:

答案 0 :(得分:4)

使用您最喜欢的JSON解析器将JSON转换为哈希,这将为您提供如下所示的内容:

json = {
    "XXX" => {"name" => "First"},
    "YYY" => {"name" => "Second"},
    "ZZZ" => {"name" => "Third"}
}

然后只需将其重新排列为具有已知键的小哈希列表:

for_mustache = json.keys.inject([ ]) do |a, k|
    a.push({ :k => k, :v => json[k]['name']})
    a
end

上面可能有更聪明的方法。现在,您将在for_mustache中找到一些简单而有规律的内容:

[
    { :k => "XXX", :v => "First"  },
    { :k => "YYY", :v => "Second" },
    { :k => "ZZZ", :v => "Third"  }
]

然后,您可以像处理Mustache中的任何其他哈希数组一样处理该数据结构:

{{#for_mustache}}
    <div>
        <h1>{{k}}</h1>
        <p>{{v}}</p>
    </div>
{{/for_mustache}}