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

时间:2013-10-03 13:49:37

标签: json grails groovy

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

当我打印params

println params 

打印

[{"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]

当我做的时候

println  params.rows
println params.pageType

打印null

我试过

  def jsonObject = request.JSON  // prints [:]

我也试过了JsonSlurper

def slurper = new JsonSlurper()
def result = slurper.parseText(params)

给出错误

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

如何将其转换为检索参数值?

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

6 个答案:

答案 0 :(得分:6)

[{"courseCategory":null,...,"deal":null}:, action:getTrainingsAsJson,  controller:publicTraining]

您似乎没有密钥发送数据,例如

data: JSON.stringify({"courseCategory":null,...,"deal":null}),

发送一些像

这样的密钥
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);
    }
});

然后得到像

这样的值
def data = JSON.parse(params.sendData)
def rows = data.rows

试试这个..,。

答案 1 :(得分:5)

如果是POST请求,则可以从request

检索JSON
request.JSON
request.JSON.courseCategory

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

答案 2 :(得分:3)

如果有人遇到调用request.JSON并收到空的问题 - 请确保明确设置dataTypecontentType,并将数据作为JSON发送。例如,使用jQuery:

$.ajax({
    url: yourURL,
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    data: JSON.stringify(yourJsonObject)
});

答案 3 :(得分:0)

看看JsonSlurper。如您所见,首先需要解析JSON文件,然后在属性访问表示法中访问JSON中的所有字段。

答案 4 :(得分:-1)

Grails会自动解析/解组JSON,您可以通过控制器中的request.JSON访问它。返回的对象是JSONObject类型,它允许对属性进行地图样式访问。您也可以直接使用此JSONObject进行数据绑定

def jsonObject = request.JSON
def instance = new YourDomainClass(jsonObject)

答案 5 :(得分:-2)

def jsonObject = request.JSON def实例= new YourDomainClass(jsonObject)/ extensions / default {“ sitekey”:“ your_site_key”,“ theme”:“ light”}。