[英]Get values from JSON url whit Ruby on Rails
我需要从Ruby on Rails的哈希值中获取GET值
@result = {
"destination_addresses" => [
"Matucana 775, Santiago Centro, Región Metropolitana de Santiago de Chile, Chile"
],
"origin_addresses" => [
"San Pablo 6134, Lo Prado, Región Metropolitana de Santiago de Chile, Chile"
],
"rows" => [
{
"elements" => [
{
"distance" => {
"text" => "10,0 km",
"value" => 9957
},
"duration" => {
"text" => "15 min",
"value" => 903
},
"status"=>"OK"
}
]
}
],
"status"=>"OK"
}
@duration = @result["rows"]["elements"]["distance"]["value"]
@distance = @result["rows"]["elements"]["duration"]["value"]
结果是:
ERROR:
can't convert String into Integer
问题在于, rows
和elements
是数组,而不是查询中所期望的哈希。 这应该可以正常工作:
@duration = @result["rows"][0]["elements"][0]["duration"]["value"]
@distance = @result["rows"][0]["elements"][0]["distance"]["value"]
简而言之,可以使用单个[]
操作的puts
调试此类问题。 只需继续将值输出到屏幕上,直到出现任何错误为止,这将告诉您应更仔细地研究哈希的哪一部分。
puts "#{@result['rows']}"
puts "#{@result['rows'][0]}"
puts "#{@result['rows'][0]['elements']}"
# etc, till you get an error instead of the value
假设您使用的是Google Maps API,最终可能会得到一些查询,它们以不同的格式返回数据。 有时,您可以获得没有行的@result
对象,或者可能是没有elements
的行条目。 这是处理此问题的方法:
get_value = lambda do |api_response, inner_key|
result = api_response['rows']
[0, 'elements', 0, inner_key, 'value'].each do |key|
return nil unless result
result = result[key]
end
result
end
@duration = get_value.call(@result, 'duration')
@distance = get_value.call(@result, 'distance')
如果您的@duration
或@distance
变量在此块末尾均为nil
,则可以确保Google Maps API没有正确解析您的查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.