如果我正确理解了这个问题,那么您应该能够在 Docpad 中生成一个 JSON 文件,几乎与您处理任何其他文档的方式相同。除了选择你最喜欢的模板插件之外,没有什么特别需要做的。我使用ECO模板插件来生成我的帖子的 JSON 文件:
<% posts = @getCollection('posts').toJSON() %>
<%content = posts[0].contentRenderedWithoutLayouts or posts[0].content%>
<%#handle first item manually just to avoid the last array member having a hanging comma%>
[{
'title': '<%-posts[0].title%>',
'date' : '<%-posts[0].date.toDateString()%>',
'content': '<%=@truncateText(content,700)%>',
'slug': '<%-posts[0].slug%>',
'url': '<%-posts[0].url%>'
<% posts = posts.slice(1)%>
<% for post in posts: %>
<%content = post.contentRenderedWithoutLayouts or post.content%>
},{
'title': '<%-post.title%>',
'date' : '<%-post.date.toDateString()%>',
'content': '<%=@truncateText(content,700)%>',
'slug': '<%-post.slug%>',
'url': '<%-post.url%>'
<%end%>
}]
在此之后,只需给模板文件双扩展名:'json.eco'
实际上,我在这里使用了一种类似的技术来合并和缩小 css 文件,我认为您可能可以使用这种方法来生成任何文档格式。
编辑(事后考虑)
作为专门用于 JSON 的更简单的解决方案,您可以使用 JavaScript 的内置函数将对象转换为 JSON。
<%-JSON.stringify(@getCollection('posts').toJSON())%>
或获得格式良好的版本
<%-JSON.stringify(@getCollection('posts').toJSON(),null,2)%>