[英]grails render collection as single json object
例如,我有下一个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
}
}
}
但遗憾的是,这不起作用。
试试阵列结构,
def list = {
render(contentType: "text/json") {
results = array {
User.list().each {user->
result "${user.id}" : "${user.name}"
}
}
}
}
我找不到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()
当我想在grails中将某些内容编码为JSON时,我将所有内容放在地图中:
render ['1':john.name, '2':alex.name] as JSON
从@aldrin回答开始,GRAILS3 json渲染需要进行修正,因为array
指令不再有效(并且更正确'应用'而不是'text'),所以解决方案必须是
def list = {
def ulist = User.list()
render(contentType: "application/json") {
results(ulist) { user ->
userid user.id
username user.name
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.