如何处理密钥中的哈希值,mustache.js?

时间:2011-07-26 12:56:02

标签: javascript json mustache

我正在尝试使用mustache.js作为我从外部API返回的JSON数据的模板系统。问题是JSON对象有以哈希开头的键,我不知道如何处理它们。对象示例(以及完全简化):

{
    "items": [
        "description": {
            "#cdata-section": "Description goes here"
        }
    ]
}

Mustache.js:

var template = '{{#items}}' +
                    '{{#description}}' +
                         '{{cdata-section}}' +
                    '{{/description}}' +
               '{{/items}}';

显然它不会识别cdata-section,因为那不是密钥的名称。我不能使用{{#cdata-section}},因为哈希表示Mustache.js中的条件或枚举。我似乎无法逃脱它,{{\#cdata-section}}没有匹配。

有解决方法吗?或者我是否必须预处理JSON对象?

1 个答案:

答案 0 :(得分:1)

也许更好的解决方案是修改mustache.js。使用正则表达式

时,违规行似乎在line 106
this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag

哪个匹配开始标记,后跟^#,然后是任意数量的空格,然后是至少一个字符,然后是任意数量的空格。

我不是最好的正则表达式,但一个合适的解决方案是遵循开头标记,断言它不匹配{{\^{{\#

this.otag + "(?!\\\\)(\\^|\\#)\\s*(.+)\\s*" + this.ctag

四重反斜杠由javascript解释为\\ + \\ = \\,然后由正则表达式\ + \ = \解释。我没有测试过这个,但它应该可以工作。

如果它适合您,请考虑在GitHub repository

打开一个拉动请求

编辑:我错过了一个地点:在line 152上,您似乎需要添加类似的断言。我将把它作为练习留给读者。