使用gson Grails视图序列化地图 >

问题描述 投票:0回答:1

我们的后端正在构建FooCategory的映射作为键,并且值是Foo元素的列表。由于控制器将其添加到json渲染过程的模型中,因此Grails gson文件如下所示:

model {
    List<String> names
    Map<FooCategory, List<Foo>> categories
}

json {
  names names
  categories <<what is the syntax>>
}

经过多次试验,我实际上无法获得对Foo元素列表的有效引用。我想例如生成如下的json输出:

{
  "names": ["name1", "name2"],
  "categories": [
    {
      "name": "category_1",
      "fooCount": 5
    },
    {
      "name": "category_5",
      "fooCount": 8
    }
  ] 
}

下一步将使用Foo语法将tmpl.templateName(fooElements)元素的列表传递到模板,但是现在我只是停留在count属性上。任何帮助表示赞赏!

json grails serialization groovy gson
1个回答
0
投票

我发现Grails的视图使用tmpl处理Iterable实体,但是由于Map是不可迭代的,因此我们必须显式调用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
}

现在可以将Iterable(categories.entrySet())传递给如下所示的模板:

model {
  Map.Entry<FooCategory, List<Foo>> entry
}

json {
  FooCategory fooCategory = entry.key
  List fooElements = entry.value

. . .
}
© www.soinside.com 2019 - 2024. All rights reserved.