在rails上读取JSON数组ruby

时间:2015-11-04 00:20:54

标签: ruby-on-rails ruby json

我从另一个看起来像这样的应用程序(从日志中)获得一个JSON数组

Parameters: {"auth_token"=>[{"auth_token"=>"d11D1E3v7pKkLW4wDj8ohgtf"}]}

这个数组会更大(这就是使用数组的原因),但我只测试是否可以从中获取内容。这是我的功能:

def valid_request_array
    data = ActiveSupport::JSON.decode(params)[:auth_token]
    Usuario.find_by_auth_token(data[0]['auth_token']).present?
end

我收到以下错误:

  

TypeError(没有将ActionController :: Parameters隐式转换为String):     app / controllers / api / actas_controller.rb:35:在`valid_request_array'

第35行是data = ActiveSupport::JSON.decode(params)[:auth_token]

我有导轨4.2,也尝试使用JSON.parse(params)JSON.parse(params[:auth_token]),但它不起作用。这里有一个类似的问题JSON Array parsing in ROR但我需要读取该值才能验证该请求。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

由于这是Params,因此您无需解码或解析它。如果您正在操作的是jasonfied (or stringified)对象,则只需要此项。例如是这样的:

"{\"auth_token\":[{\"auth_token\":\"d11D1E3v7pKkLW4wDj8ohgtf\"}]}" 

然后你可以解析它以获得你的哈希对象。

在这种情况下,您不需要,因为对象不是stringified。这就是你遇到这个错误的原因:

no implicit conversion of ActionController::Parameters into String
然而,

获取令牌,只需将其直接称为:

params["auth_token"].first["auth_token"]

应该为您返回令牌d11D1E3v7pKkLW4wDj8ohgtf

答案 1 :(得分:0)

您收到此错误是因为params不是字符串,而decode需要字符串。您获得的params不是JSON格式。尝试:

def valid_request_array
   Usuario.find_by_auth_token(params[:auth_token][0]["auth_token"]).present?
end