Grails:如何访问以JSON格式出现的参数

mon*_*nda 5 grails groovy json

从PHP应用程序调用grails控制器,它以JSON格式发送数据.

当我打印params

println params 
Run Code Online (Sandbox Code Playgroud)

打印

[{"courseCategory":null,"courseId":null,"show":null,
    "rows":6,"trainers":null,"courses":null,"cities":null,
    "fromDate":null,"toDate":null,"pageType":"HOME","deal":null}:,   
    action:getTrainingsAsJson, 
    controller:publicTraining]
Run Code Online (Sandbox Code Playgroud)

当我做

println  params.rows
println params.pageType
Run Code Online (Sandbox Code Playgroud)

打印 null

我试过了

  def jsonObject = request.JSON  // prints [:]
Run Code Online (Sandbox Code Playgroud)

我也尝试过 JsonSlurper

def slurper = new JsonSlurper()
def result = slurper.parseText(params)
Run Code Online (Sandbox Code Playgroud)

这给出了错误

No signature of method: groovy.json.JsonSlurper.parseText() is applicable for argument types: (org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap)
Run Code Online (Sandbox Code Playgroud)

如何转换它来检索参数值?

或者有没有办法将其转换为地图,以便我可以轻松访问参数?

dma*_*tro 6

如果是POST请求,则可以从requestas 检索JSON

request.JSON
request.JSON.courseCategory
Run Code Online (Sandbox Code Playgroud)

等等

从请求中看到的是null从客户端发送的值.验证有效负载.


MKB*_*MKB 6

[{"courseCategory":null,...,"deal":null}:, action:getTrainingsAsJson,  controller:publicTraining]
Run Code Online (Sandbox Code Playgroud)

您似乎在没有密钥的情况下发送数据,例如

data: JSON.stringify({"courseCategory":null,...,"deal":null}),
Run Code Online (Sandbox Code Playgroud)

用一些关键字发送它

jQuery.ajax({
    url: '${g.createLink(action: 'asd')}',
    type: 'post',
    dataType: 'json',
    data: "sendData=" + JSON.stringify({"courseCategory":null,"courseId":null,"show":null, "rows":6,"trainers":null,"courses":null,"cities":null, "fromDate":null,"toDate":null,"pageType":"HOME","deal":null}),
    success: function (data) {
        console.debug(data);
    }
});
Run Code Online (Sandbox Code Playgroud)

然后获得价值

def data = JSON.parse(params.sendData)
def rows = data.rows
Run Code Online (Sandbox Code Playgroud)

试试这个..,.