访问多JSON
问题描述:
的参数我有一个POST请求,看起来像一个Rails的JSON API服务器:访问多JSON
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?
如果我写PARAMS [:DATA]登录我看到的属性,但一切嵌套是空的(如PARAMS [:DATA] [:帖]或PARAMS [:DATA] [:标签]
UPDATE:
当我试图做
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'
答
你的问题是,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"}} ')
+0
nb。这是用rails 3.2.3,ruby 1.9.3p125测试的 – 2012-05-25 10:37:59
是'PARAMS [:DATA]'一个字符串,数组或其他类型的? – methyl 2012-04-09 17:33:51
它是多部分部分的表单名称,您可以在问题 – 2012-04-09 17:39:18
中看到完整请求Params [:DATA] ['tags']是否有效?我不知道如果轨道运行分析json虽然'with_indifferent_access'东西 – 2012-04-09 18:27:56