如何访问这种哈希

时间:2016-04-15 16:01:20

标签: ruby-on-rails ruby ruby-on-rails-3 rest-client

我正在使用RestClient发出一个帖子请求,所以我做了一个错误回复,所以我可以在控制台中打印这些错误消息

我根据restclient gem文档尝试了以下内容

begin
  response = RestClient.post base_uri, params.to_json, content_type: 'application/json', accept: 'application/json'
rescue RestClient::ExceptionWithResponse => err
  error = err.response
  p "this is the error response #{error}"
end

当我打印err.response时,我得到以下

"this is the error response {\"error\":{\"message\":\"An active access token must be used to query information about the current us er.\",\"type\":\"OAuthException\",\"code\":2500,\"fbtrace_id\":\"HTzmJ0CcIfd\"}}"

如何访问上述哈希中的消息以在控制台中显示它?

尝试

p "this is the error response #{error.message}"

它给了我"Bad request" - 不知道它在哪里

2 个答案:

答案 0 :(得分:2)

如果你只想输出它:

error = JSON.load(err.response)

puts error['error']['message']

您可以随时格式化它:

puts '[Code %d %s] %s' % [
  error['error']['code'],
  error['error']['type'],
  error['error']['message']
]

请注意,在Rails进程中使用puts并不会很好。您可能希望改为使用Rails.logger.debug

答案 1 :(得分:1)

您收到的回复是JSON。您需要首先解码JSON然后与数据交互。就个人而言,我喜欢MultiJson

begin
  response = RestClient.post base_uri, params.to_json, content_type: 'application/json', accept: 'application/json'
rescue RestClient::ExceptionWithResponse => err
  error = MultiJson.load(err.response)
  p "this is the error response #{error[:message]}"
end