访问多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' 
+0

是'PARAMS [:DATA]'一个字符串,数组或其他类型的? – methyl 2012-04-09 17:33:51

+0

它是多部分部分的表单名称,您可以在问题 – 2012-04-09 17:39:18

+0

中看到完整请求Params [:DATA] ['tags']是否有效?我不知道如果轨道运行分析json虽然'with_indifferent_access'东西 – 2012-04-09 18:27:56

你的问题是,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