在我的控制器中,我有以下代码......
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 ,但显然这不起作用。提前谢谢!
答案 0 :(得分:32)
试试这个:
body = JSON.parse(response.body)
id = body["id"]
对于这种事情,我建议a)使用Koala或b)使用httparty创建一个类。然后,您可以将format: json
设置为自动解析返回的json。请参阅here和here
答案 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-Type
或application/json
,您可以使用response.parse_response
来获取从JSON有效负载生成的哈希值。
response = HTTParty.get('https://graph.facebook.com/zuck')
payload = response.parsed_response
logger.debug(payload['id'])
注意:仅当回复parsed_response
为Content-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'
。