【问题标题】:Get values from JSON url whit Ruby on Rails使用 Ruby on Rails 从 JSON url 获取值
【发布时间】:2023-03-04 14:14:01
【问题描述】:

我需要从 Ruby on Rails 的哈希值中获取值

@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

【问题讨论】:

    标签: ruby-on-rails ruby json hash get


    【解决方案1】:

    问题在于 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 地图 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 地图API 没有正确解析您的查询。

    【讨论】:

    • nil:NilClass 的未定义方法 `[]'
    • 这很奇怪。看一下this pastie,它包含哈希以及返回结果的@duration@distance 查询。您确定@result 哈希与您的问题中的完全一样,并且您正确地从答案中复制粘贴了查询吗?我还更新了我的答案,了解如何找到操作的失败步骤。
    • stackoverflow.com/questions/24177311/… 这是我的网页代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多