javascript - 使用 Handlebars 生成 JSON

标签 javascript json handlebars.js

我需要将 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/

相关文章:

javascript - 根据谷歌表格中的 URL 查找并选择一个单元格

javascript - 创建可抓取的跨域 javascript 小部件

javascript - 从自调用嵌套函数引用成员变量

node.js - 使用删除路由器删除文件夹内的文件 - Node.Js

handlebars.js - Handlebars.js 的双花括号和三花括号有什么区别

javascript - 依次单击两个元素

javascript - Google 可视化数据表到 CSV 下载

javascript - 调用 fetch() 时,主干集合给出 "Ajax of undefined"错误

javascript - 按属性对 JSON 数组进行排序的通用方法

javascript - 如何在另一个自定义助手中调用一个自定义助手函数