我有一个Rails JSON API服务器的发布请求,如下所示:
POST /api/posts.json HTTP/1.1
Accepts: application/json
X-API-KEY: 7d867d16a5e25337b6d7857965f812bee73b76ac
Content-Length: 288
Content-Type: multipart/form-data; boundary=syoYQUQsGwI2XqShQimFdv2QSe-_GYbjVx40T1kS
Host: 10.0.2.2:3000
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
--syoYQUQsGwI2XqShQimFdv2QSe-_GYbjVx40T1kS
Content-Disposition: form-data; name="DATA"
Content-Type: application/json; charset=UTF-8
Content-Transfer-Encoding: 8bit
{"tags":["dffdff"],"location_id":3,"post":{"content":"test #dffdff"}}
--syoYQUQsGwI2XqShQimFdv2QSe-_GYbjVx40T1kS--
如何访问JSON参数?
如果我写params [:DATA]来记录我看到属性,但嵌套的所有内容都是空的(例如params [:DATA] [:post]或params [:DATA] [:tags]
更新:
当我想要做的时候
Rails.logger.debug(params[:DATA])
我得到了
{"tags":["dffdff"],"location_id":3,"post":{"content":"test #dffdff"}}
但是当我尝试
时Rails.logger.debug(params[:DATA][:post])
我得到了
TypeError (can't convert Symbol into Integer):
app/controllers/api/posts_controller.rb:19:in `[]'
app/controllers/api/posts_controller.rb:19:in `create'
答案 0 :(得分:4)
您的问题是params[:DATA]
是一个字符串,但您将其视为哈希。
您需要将JSON字符串解析为Ruby哈希,如下所示:
data = JSON.parse(params[:DATA])
puts data['post']
如果你想在哈希中使用符号,即[:post]
,那么你可以这样做:
data = data.with_indifferent_access
puts data[:post]
NB。如果你想在ruby控制台中测试它,而不是使用params[:DATA]
,你可以在第一行初始化数据:
data = JSON.parse('{"tags":["dffdff"],"location_id":3,"post":{"content":"test #dffdff"}} ')