加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Grape,将JSON作为params发送

发布时间:2020-12-17 02:49:16 所属栏目:百科 来源:网络整理
导读:My Grape API接受json格式,我有接受 JSON作为参数的方法: desc 'JSON test'params do requires :json,type: JSONendpost :json_test do json = params[:json] {result: json}end 当我通过邮递员发出请求时,参数是原始的application / json内容类型: { "jso
My Grape API接受json格式,我有接受 JSON作为参数的方法:

desc 'JSON test'
params do
  requires :json,type: JSON
end
post :json_test do
  json = params[:json]
  {result: json}
end

当我通过邮递员发出请求时,参数是原始的application / json内容类型:

{
   "json": {"test": "test"}
}

当我发送这个时,我收到错误消息:

"json is invalid"

但是,当我这样发送时:

{
  "json": "{"test": "test"}"
}

它显示了我正确的答案:

{
 "result": {
   "test": "test"
  }
}

为什么会这样?当我创建类型Hash时,第一个变体可以工作,但是如果我想发送哈希/ jsons数组?我知道Grape不支持Array [Hash]类型.

解决方法

grape会在应用程序/ json数据到达你的params块之前解析它.

在这个块中:

params do
  requires :json,type: JSON
end

你告诉葡萄你的:json param应该包含一个JSON字符串.

所以当你发送这个:

{
   "json": {"test": "test"}
}

json包含

{"test": "test"}

它被视为哈希,而不是有效的JSON字符串因此我们的错误.

但是当你发送这个

{
  "json": "{"test": "test"}"
}

json包含

"{"test": "test"}"

这是一个有效的JSON字符串,然后它会愉快地为您解析哈希.

如果你想使用

{
   "json": {"test": "test"}
}

在你的帖子请求中,你的params块应该是这样的:

params do
    requires :json,type: Hash #<-- Hash here instead of JSON since json data has already been parsed into a Hash
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读