我想创建以下 json:
{
"reviewers": [
{
"user": {
"name": "a"
}
},
{
"user": {
"name": "b"
}
},
{
"user": {
"name": "c"
}
}
]
}
使用:
users= ["a", "b", "c"]
def binding = [
arr : users
]
def f = new File(templateFileName)
def engine = new groovy.text.GStringTemplateEngine()
def template = engine.createTemplate(f).make(binding)
println template.toString()
我尝试了模板的几种变体并以:
{
"reviewers": [
<% arr.each { out <<
""" {
"user": {
"name": "${it}"
}
},"""
} %>
]
}
这导致:
{
"reviewers": [
{
"user": {
"name": "a"
}
}, {
"user": {
"name": "b"
}
}, {
"user": {
"name": "c"
}
},// <-- illegal comma
]
}
问题是最后一个条目添加了一个多余的逗号(这导致 json 不合法) 有没有一种方法可以更优雅地创建它,以便最后一个条目不包含非法逗号?
最佳答案
另一种方法是使用 collect
而不是 each
用子模板(您粘贴的第二个三引号文本)处理每个数组元素。接下来,使用 ,\n
连接所有元素,就像这样
tpl = '''{
"reviewers": [
<% out << arr.collect {
""" {
"user": {
"name": "${it}"
}
}"""
}.join(',\\n') %>
]
}
'''
users= ["a", "b", "c"]
def binding = [
arr : users
]
def engine = new groovy.text.GStringTemplateEngine()
def template = engine.createTemplate(tpl).make(binding)
println template.toString()
请注意,out
是整个计算的结果,而不是每次迭代期间的结果。
关于json - 如何使用 groovy GStringTemplateEngine 在 json 文件中创建数组字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42665755/