我从另一个看起来像这样的应用程序(从日志中)获得一个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但我需要读取该值才能验证该请求。任何帮助表示赞赏
答案 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