4

例如我有下一个域类

User{
   String name
}

我也有这个类的 2 个对象

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

应该如何在 UserController 中查看“列表”操作以像这样以 JSON 格式表示 User.list()

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

让我说得更准确一些。我想要这样的东西:

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

但遗憾的是,这行不通。

4

4 回答 4

2

试试数组结构,

def list = {
    render(contentType: "text/json") {
        results = array {
            User.list().each {user->
                result "${user.id}" : "${user.name}"
            }
        }
    }
}
于 2012-06-05T18:14:22.250 回答
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()
于 2012-06-13T15:10:17.090 回答
1

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

render ['1':john.name, '2':alex.name] as JSON
于 2012-06-05T14:42:30.087 回答
0

从@aldrin 回答开始,需要对 GRAILS3 json 渲染进行更正,因为array指令不再起作用(并且更正确的是“应用程序”而不是“文本”),所以解决方案必须是

def list = {
def ulist = User.list()
render(contentType: "application/json") {
    results(ulist) { user ->
                 userid  user.id
                 username  user.name
    }
}
}
于 2019-08-22T09:56:18.363 回答