0

我的域类被声明为我使用 Grails 1.3.7

StudentReport{
  String username
  String studentName
}

 def sp = StudentReport.createCriteria()



def studentReportList = sp.list {

            projections {
               property 'username'
                property 'studentName'
            }
            firstResult 0
            maxResults 20
            order("id", "asc")
        } 
render studentReportList as JSON

My expected result is

[
{"username":"13B06","student_name":"JOHN SAMUEL"},
{"username":"13B07","student_name":"KATHIRESAN.K"},
{"username":"13B08","student_name":"KATHIRESAN.K"},
{"username":"13B11","student_name":"MALINI.S"}
]

But what i get is

[
   ["13B06","JOHN SAMUEL"],
   ["13B07","KATHIRESAN.K"],
   ["13B08","KATHIRESAN.K"],
   ["13B11","MALINI.S"]
]

我需要属性名称和花括号。任何人都可以帮助我。我尝试在控制器中不使用投影,然后我得到了确切的结果,但如果我尝试使用投影,那么我坚持得到相同的结果。

4

1 回答 1

2
[ {"13B06","JOHN SAMUEL"},{"13B07","KATHIRESAN.K"},{"13B08","KATHIRESAN.K"},{"13B11","MALINI.S"} ]

不是有效的 JSON。您当前得到的输出是正确的,因为studentReportList是 List of Lists,所以 JSON 必须是数组数组。如果你想要大括号,那么内部元素需要是 JSON对象而不是数组。生成

[
  {"username":"13B06","student_name":"JOHN SAMUEL"},
  ...
]

您可以将合适的结果转换器添加到您的标准中,并使用property投影方法的两个参数形式来分配正确的别名:

def studentReportList = sp.list{
        projections {
           property 'username', 'username'
            property 'studentName', 'student_name'
        }
        firstResult 0
        maxResults 20
        order("id", "asc")
        resultTransformer AliasToEntityMapResultTransformer.INSTANCE
    }

(连同适当的 import)使条件返回地图列表而不是列表列表。

于 2013-10-08T14:18:49.100 回答