【问题标题】:Rails: Cannot Parse JSON object neither with hash key or indexRails:无法使用散列键或索引解析 JSON 对象
【发布时间】:2012-09-14 10:49:05
【问题描述】:

奇怪的问题标签,但仍然想问,因为尽管看起来很容易,但无论我尝试了什么,我都无法完成

我正在尝试从 Google Maps Directions API 给出的 URL 解析到点之间的持续时间。感谢我从这里收到的答案,我能够捕获 JSON 对象并获取持续时间对象,但是无论我做什么,我都无法从“持续时间”属性中获取内部值“文本”或“值”。

这是回复;

{
  "text" : "6 mins",
  "value" : 373
}

这是我在 rails 中编写的代码

@request = Net::HTTP.get(URI.parse('http://maps.googleapis.com/maps/api/directions/json?origin=40.983204,29.0216549&destination=40.99160908659266,29.02334690093994&sensor=false'))
    hash = JSON.parse @request
    duration = hash['routes'][0]['legs'][0]['duration']

    respond_to do |format|
    format.html {render :index}
    format.json {render json: duration}
    end

注意:当然,[0]['text']方法都试过了。

【问题讨论】:

    标签: ruby-on-rails json parsing google-maps


    【解决方案1】:

    首先,您需要将持续时间定义为实例变量,以使其在您的视图中可用(如果您需要在此使用它)

    @duration = hash['routes'][0]['legs'][0]['duration']
    

    【讨论】:

    • 完全没有意义。我没有用视图显示变量。因此我不需要将其定义为全局变量。
    • 所以问题是您在持续时间变量中有数据但无法将它们取出?
    • 是的。持续时间变量似乎是一个散列,但即使我尝试将它们称为 ['text'] 或 [0],我也无法获得内部值“text”或“value”。没有任何效果。
    【解决方案2】:

    duration["text"] 和 duration["value"] 不起作用?

        1.9.3p194 :001 > require 'net/http'
         => true 
        1.9.3p194 :002 > require 'json'
         => true 
        1.9.3p194 :003 > @request = Net::HTTP.get(URI.parse('http://maps.googleapis.com/maps/api/directions/json?origin=40.983204,29.0216549&destination=40.99160908659266,29.02334690093994&sensor=false'));
        1.9.3p194 :004 >   hash = JSON.parse @request;
        1.9.3p194 :005 >   duration = hash['routes'][0]['legs'][0]['duration']
         => {"text"=>"6 mins", "value"=>373} 
        1.9.3p194 :006 > duration["text"]
         => "6 mins" 
        1.9.3p194 :007 > duration["value"]
         => 373 
    

    【讨论】:

    • Rails 3.2.8 在空应用程序的控制台中也是如此
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2017-06-04
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多