我有一个从视图传入的列表列表,如下所示:
[lists:[["e","q"],["t","w"]], action:save, controller:newReport]
在我的控制器中
def lists = params.lists;
列表将是一个字符串,其值为“[[”e“,”q“],[”t“,”w“]]”
我应该如何遍历列表来获取每个子列表?
答案 0 :(得分:3)
使用JSON.parse:
groovy:000> lists = JSON.parse("[['e', 'q'], ['w', 'q']]")
===> [["e","q"],["w","q"]]
groovy:000> lists.each { list -> println list }
[e, q]
[w, q]
===> [["e","q"],["w","q"]]
groovy:000> lists[0].each { entry -> println entry }
e
q
===> ["e","q"]
这比GroovyShell更安全。这样您就不必考虑如何保护它或如何使用正则表达式来解析字符串。
答案 1 :(得分:0)
Grails有一个很好的type conversion,可以在params
中使用。
您是否尝试过params.list('lists')
?
修改强>
现在在这里尝试,在您的情况下,您可以评估要在列表中转换的表达式:
params.lists = '[["e","q"],["t","w"]]'
def listValues = new GroovyShell().evaluate(params.lists)
listValues.each { list ->
println list
println list.class.canonicalName
}
EDIT2 :如果用户发送了其他不期望的内容,这可能会很危险。您可以按照this post。
中的说明保护您的GroovyShell