4

たとえば、次の Domain クラスがあります

User{
   String name
}

また、このクラスのオブジェクトが2つあります

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

User.list() を JSON 形式で表すには、UserController で "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の回答から始めて、arrayディレクティブが機能しなくなったため(および「テキスト」ではなく「アプリケーション」の方が正しいため)、GRAILS3 jsonレンダリングに修正が必要です。したがって、解決策は

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 に答える