繁体   English   中英

从Ruby on Rails的JSON URL值获取值

[英]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

问题在于, rowselements是数组,而不是查询中所期望的哈希。 这应该可以正常工作:

@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM