我正在尝试使用以下模板生成带胡子的JSON文件:
{
"name": "{{customer_info.first_name}}",
"email": "{{contact_info.email}}",
"campaign": {
"campaignId": "{{contact_info.campaign.campaignId}}"
},
"tags": [
{{#contact_info.tags}}
{
"tagId": "{{tagId}}"
},
{{/contact_info.tags}}
]
}
作为输出示例,我得到:
{
"name": "Antonio",
"email": "myemail@gmail.com",
"campaign": {
"campaignId": "pfft"
},
"tags": [
{
"tagId": "6prrtAP"
},
{
"tagId": "64rrrE9"
},
]
}
其中不幸的是一个BAD FORMATTED JSON,因为在数组的最后一个元素之后有一个不想要的“,”。
你们有没有人帮我解决这个问题并删除逗号?
非常感谢
答案 0 :(得分:1)
不要从文本模板生成JSON。你会经常遇到这样的问题。多余的逗号,字符串中的元字符(如果customer_info.first_name
包含双引号),未能正确嵌套结构等。
使用编程语言将本地数据生成为本机结构,并使用编程语言提供的库将其编码为JSON。
答案 1 :(得分:0)
我会这样做:
var md = {};
var tagsCount = 2;
var currTagIndex = 0;
md['show_comma'] = function(){
currTagIndex++;
return currTagIndex <= tagsCount;
}
然后在Mustache模板中:
{{#show_comma}}
,
{{/show_comma}}
答案 2 :(得分:0)
我一直遇到类似的问题,我发现Handlebars与小胡子非常相似,并且功能更强大。
您可以检查出来并尝试使用此模板解决问题,而无需在当前模型中添加任何内容。
{
"name": "{{customer_info.first_name}}",
"email": "{{contact_info.email}}",
"campaign": {
"campaignId": "{{contact_info.campaign.campaignId}}"
},
"tags": [
{{#each contact_info.tags}}
{
"tagId": "{{tagId}}"
}{{#unless @last}},{{/unless}}
{{/each}}
]
}
答案 3 :(得分:0)
尝试使用SelectTransform npm软件包。它具有类似Mustust的语法,而没有Mustache产生的所有副作用,而且包的大小也不如Handlebars.js
import ST from "stjs";
const data = {
name: 'Jakub',
friends: [
{
name: 'Michal'
}
]
};
const template = {
newName: '{{ name }}',
friends: {
'{{ #each friends }}': {
subName: '{{ name }}'
}
}
};
console.log(ST.select(data).transformWith(template).root());
// Result:
/**
* {
* "newName": "Jakub",
* "friends": [
* {
* "subName": "Michal"
* }
* ]
* }
*/