【问题标题】:Generating JSON with Handlebars使用 Handlebars 生成 JSON
【发布时间】: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


【解决方案1】:

正如我在评论中已经说过的,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) );

【讨论】:

  • 好的,谢谢。这帮助我找到了前进的方向。
猜你喜欢
  • 1970-01-01
  • 2020-06-11
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多