0

我有一个对 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'
4

1 回答 1

4

您的问题是这params[:DATA]是一个字符串,但您将它视为哈希。

您需要将 JSON 字符串解析为 Ruby 哈希,如下所示:

     data = JSON.parse(params[:DATA])
     puts data['post']

如果你想在哈希中使用符号,即[:post],那么你可以这样做:

     data = data.with_indifferent_access
     puts data[:post]

注意。如果您想在 ruby​​ 控制台中对此进行测试,而不是使用params[:DATA],您可以在第一行使用以下命令初始化数据:

     data = JSON.parse('{"tags":["dffdff"],"location_id":3,"post":{"content":"test #dffdff"}} ')
于 2012-05-25T10:37:22.043 回答