我需要将 Handlebars 模板中的一小块 HTML 转换为 JSON 对象的一部分。以下是 Handlebars 模板的相关部分:
<ul>
{{#each props.items}}
<li>
<a>{{name}}</a>
</li>
{{/each}}
</ul>
我面临的问题是我需要 JSON 对象中的最终输出是字符串数组(最终代码的每行一个)或没有换行符的单个字符串。相反,我将整个最终 block 作为单个字符串,但带有换行符 - 这使得 JSON 无效。
我不拥有 Handlebars 模板或 JSON,因此我无法更改其中任何一个。
这是我的代码当前的样子:
var fileContents = Plugins.fs.readFileSync(hbsPath, "utf8");
//Next line is my latest attempt to close each line with quotes,
//inject a newline and start new line with quotes.
//It doesn't work - the newline isn't inserted.
//I've also tried \n\r, \r\n, \r
fileContents = fileContents.replace(/(\r\n|\n|\r)/gm, "\",\n\"");
var template = hbs.compile(fileContents);
var thisProps = {props: props};
return new hbs.SafeString(template(thisProps));
如果我只是将返回的字符串写入控制台,它看起来是正确的,但是当我用它创建 JSON 文件时,未终止的字符串会被标记为无效。
更新:这是 JSON 的用武之地:
{
"code" : [{{renderSnippet "MyPartial" MyModel }}]
}
这是 Handlebars 处理的文件,{{ }}
中的部分内容将替换为来自 Handlebars 的字符串。该字符串就是问题所在 - 它包含换行符,这使其无效 JSON。我需要将其设置为没有换行符的单个字符串,或者将其设置为每行作为单独字符串的字符串数组。
有什么指点吗?
谢谢。
最佳答案
正如我在评论中已经说过的,Handlebars 不会创建 JSON。 Handlebars 是一个针对 html 的模板引擎,因此它只适用于 html 或具有相同或相似转义的语言。您需要将 {{renderSnippet "MyPartial"MyModel }}
的结果存储在转换为 JSON 的对象中。
类似的事情:
var renderSnippedTpl = Handlebars.compile('{{renderSnippet "MyPartial" MyModel }}');
var obj = {
code : [renderSnippedTpl({/*required params*/})]
}
console.log( JSON.stringify(obj) );
关于javascript - 使用 Handlebars 生成 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683854/