【发布时间】:2016-11-18 18:32:29
【问题描述】:
我需要将车把模板中的一小段 HTML 转换为 JSON 对象的一部分。以下是 Handlebars 模板的相关部分:
<ul>
{{#each props.items}}
<li>
<a>{{name}}</a>
</li>
{{/each}}
</ul>
我面临的问题是我需要 JSON 对象中的最终输出是一个字符串数组(每行最终代码一个)或一个没有换行符的单个字符串。相反,我将整个最终块作为单个字符串获取,但 带有换行符 - 这使得 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 无效的换行符。我需要使它成为一个没有换行符的单个字符串,或者一个字符串数组,每行作为一个单独的字符串。
任何指针?
谢谢。
【问题讨论】:
-
您应该展示如何创建 JSON 字符串。
-
@t.niese:Handlebars 正在这样做。这就是问题所在——我没有控制它。上面第二个 sn-p 中的最后三行处理从上面第一个 sn-p 中的 Handlebars 模板生成的字符串。
-
Handlebars 返回一个字符串但不创建 JSON。你为什么期望它创建 JSON?
-
对。我明白了。我修改了问题以显示 JSON 的来源。来自 Handlebars 的字符串存储在 JSON 模板中,而不是部分。
标签: javascript json handlebars.js