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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |