使用HTTParty解析Controller中的JSON

时间:2013-08-19 18:32:17

标签: ruby-on-rails ruby facebook-graph-api httparty

在我的控制器中,我有以下代码......

response = HTTParty.get('https://graph.facebook.com/zuck')
logger.debug(response.body.id)

我得到一个NoMethodError / undefined方法`id'

如果我......

logger.debug(response.body)

它输出应该......

{"id":"4","name":"Mark Zuckerberg","first_name":"Mark","last_name":"Zuckerberg","link":"http:\/\/www.facebook.com\/zuck","username":"zuck","gender":"male","locale":"en_US"}

有人会认为它是 response.body.id ,但显然这不起作用。提前谢谢!

4 个答案:

答案 0 :(得分:32)

试试这个:

body = JSON.parse(response.body)
id = body["id"]

对于这种事情,我建议a)使用Koala或b)使用httparty创建一个类。然后,您可以将format: json设置为自动解析返回的json。请参阅herehere

答案 1 :(得分:11)

您可以使用HTTParty.get强制将响应视为JSON,如下所示:

response = HTTParty.get("http://itunes.apple.com/search",
    {query: {term: 'tame impala'}, format: :json})

response['results'][0]['trackName']

=> "Let It Happen"

答案 2 :(得分:5)

如果回复response['id']Content-Typeapplication/json,您可以使用response.parse_response来获取从JSON有效负载生成的哈希值。

response = HTTParty.get('https://graph.facebook.com/zuck')

payload = response.parsed_response

logger.debug(payload['id'])

注意:仅当回复parsed_responseContent-Type时,application/json才会成为哈希,否则HTTParty会将其作为字符串返回。为了强制执行哈希,如果响应未返回application/json,您可以将format作为参数HTTParty.get(url, format: :json)传递。

答案 3 :(得分:0)

HTTParty应根据返回的内容类型自动解析内容。扎克的杰森似乎正在滔滔不绝。

pry(main)> HTTParty.get('https://graph.facebook.com/zuck')
=> "{\"id\":\"4\",\"first_name\":\"Mark\",\"gender\":\"male\",\"last_name\":\"Zuckerberg\",\"link\":\"https:\\/\\/www.facebook.com\\/zuck\",\"locale\":\"en_US\",\"name\":\"Mark Zuckerberg\",\"username\":\"zuck\"}"

但这样可行:

pry(main)> HTTParty.get('http://echo.jsontest.com/foo/bar/baz/foo')
=> {"baz"=>"foo", "foo"=>"bar"}

如果您自己在控制台中尝试,请不要忘记require 'httparty'