Json 序列化映射<;食品类别、列表<;Foo>&燃气轮机;使用gson-Grails视图
我们的后端正在构建一个Json 序列化映射<;食品类别、列表<;Foo>&燃气轮机;使用gson-Grails视图,json,grails,serialization,groovy,gson,Json,Grails,Serialization,Groovy,Gson,我们的后端正在构建一个foocegory的映射作为键,其值是Foo元素的列表。由于控制器将此添加到json呈现过程的模型中,因此Grailsgson文件如下所示: model { List<String> names Map<FooCategory, List<Foo>> categories } json { names names categories <<what is the syntax>> } {
foocegory
的映射作为键,其值是Foo
元素的列表。由于控制器将此添加到json
呈现过程的模型中,因此Grailsgson
文件如下所示:
model {
List<String> names
Map<FooCategory, List<Foo>> categories
}
json {
names names
categories <<what is the syntax>>
}
{
"names": ["name1", "name2"],
"categories": [
{
"name": "category_1",
"fooCount": 5
},
{
"name": "category_5",
"fooCount": 8
}
]
}
model {
Map.Entry<FooCategory, List<Foo>> entry
}
json {
FooCategory fooCategory = entry.key
List fooElements = entry.value
...
}
下一步是使用
tmpl.templateName(fooElements)
语法将Foo
元素的列表传递给模板,但现在我只是停留在count属性上。感谢您的帮助 我发现Grails的视图使用tmpl
处理可Iterable实体,但由于Map不是可Iterable,我们必须显式调用entrySet()
方法。这里有一个工作版本:
model {
List<String> names
Map<FooCategory, List<Foo>> categories
}
json {
def stats = categories.entrySet().collect { cat ->
[ name: cat.key.name, fooCount: cat.value.size() ]
}
names names
categories stats
}
请注意:JSON只允许使用字符串键。根据FooCategory是什么,可能需要考虑如何表示数据。