grails将集合渲染为单个json对象

时间:2012-06-05 13:50:47

标签: json grails

例如,我有下一个Domain类

User{
   String name
}

此外,我有2个此类对象

new User(name: "John").save()
new User(name: "Alex").save()

如何在UserController中查看“list”操作以JSON格式表示User.list(),如下所示

{1: "John", 2: "Alex"}

让我更准确一点。我想要这样的东西:

UserController{
   def list = {
    render(contentType: "text/json") {
        User.list().each {user->
            user.id = user.name
        }
    }
}

但遗憾的是,这不起作用。

4 个答案:

答案 0 :(得分:2)

尝试数组结构,

def list = {
    render(contentType: "text/json") {
        results = array {
            User.list().each {user->
                result "${user.id}" : "${user.name}"
            }
        }
    }
}

答案 1 :(得分:2)

我找不到JSONBuilder API的解决方案。因此我在org.codehaus.jackson的帮助下完成了我的解决方案。

response.setContentType("text/json")
JsonGenerator g = jsonFactory.createJsonGenerator(response.getOutputStream())
g.writeStartObject()
for (user in users) {
    g.writeStringField(user.id.toString(), user.name)
}
g.writeEndObject()
g.close()

答案 2 :(得分:1)

当我想在grails中将某些内容编码为JSON时,我将所有内容放在地图中:

render ['1':john.name, '2':alex.name] as JSON

答案 3 :(得分:0)

从@aldrin答案开始,GRAILS3 json呈现需要更正,因为array指令不再起作用(并且更正确的是“ application”而不是“ text”),因此解决方案必须是

def list = {
def ulist = User.list()
render(contentType: "application/json") {
    results(ulist) { user ->
                 userid  user.id
                 username  user.name
    }
}
}