无法将字符串转换为整数 - 从哈希中的哈希值中提取值

时间:2015-02-24 21:45:44

标签: mysql ruby arrays json sequel

我发现了很多非常相似的主题,但我只是遗漏了一些东西。 >。<

基本上,我正在尝试使用数据库凭据,主机地址和名称创建名为$db_url的变量。

当尝试在哈希中提取哈希值时,我收到以下错误:

`[]': can't convert String into Integer (TypeError)

在这一行:

$credentials = $svc_details["credentials"]

以下是上下文:

if (ENV['VCAP_SERVICES'])

  $vcap = JSON.parse(ENV['VCAP_SERVICES'])
  $svc_details = $vcap["mysql-5.1"]
  $credentials = $svc_details["credentials"]
  $host = $credentials["host"]
  $username = $credentials["username"]
  $password = $credentials["password"]
  $database = $credentials["name"]
  $port = $credentials["port"]
  $db_url = "mysql://#{$username}:#{$password}@#{$host}/#{$database}"

end

configure do
  Sequel.connect($db_url || ENV['DATABASE_URL'] || 'sqlite://blog.db')

  require 'ostruct'
  Blog = OpenStruct.new(
    :title => 'My Title',
    :author => 'My Name',
    :url_base => ENV['SITE_URL'],
    :admin_password => 'My Password',
    :admin_cookie_key => 'cookie_key',
    :admin_cookie_value => 'cookie_value',
    :disqus_shortname => nil
  )
end

修改

以下是我正在努力工作的JSON示例:

{"mysql-5.1":[
    {
        "name":"mysql-4f700",
        "label":"mysql-5.1",
        "plan":"free",
        "tags":["mysql","mysql-5.1","relational"],
        "credentials":{
            "name":"d6d665aa69817406d8901cd145e05e3c6",
            "hostname":"mysql-node01.us-east-1.aws.af.cm",
            "host":"mysql-node01.us-east-1.aws.af.cm",
            "port":3306,
            "user":"uB7CoL4Hxv9Ny",
            "username":"uB7CoL4Hxv9Ny",
            "password":"pzAx0iaOp2yKB"
        }
    },
    {
        "name":"mysql-f1a13",
        "label":"mysql-5.1",
        "plan":"free",
        "tags":["mysql","mysql-5.1","relational"],
        "credentials":{
            "name":"db777ab9da32047d99dd6cdae3aafebda",
            "hostname":"mysql-node01.us-east-1.aws.af.cm",
            "host":"mysql-node01.us-east-1.aws.af.cm",
            "port":3306,
            "user":"uJHApvZF6JBqT",
            "username":"uJHApvZF6JBqT",
            "password":"p146KmfkqGYmi"
        }
    }
]}

我是一个编程新手,所以如果我缺少信息或者不理解某些事情我会道歉。

1 个答案:

答案 0 :(得分:0)

can't convert String into Integer (TypeError)错误是因为$svc_details是一个数组,即一个条目列表,您使用数字索引选择所需的条目但您尝试使用字符串{{ 1}}作为数组的索引。

如果你看一下你的JSON,你会发现"credentials"在开始时引用了一个数组(由"mysql-5.1"括号括起来),其中有2个条目:开始的[] {1}}和第二个开始{ "name":"mysql-4f700"...

的人

这意味着当你写:

{ "name":"mysql-f1a13"...

然后$svc_details = $vcap["mysql-5.1"] 是一个包含2个元素的数组,因此您无法直接进入$svc_details

如果您知道是否需要第一个或第二个条目,那么您可以使用"credentials"$svc_details = $vcap["mysql-5.1"][0]来选择JSON的相应部分,或者您可以编写一些代码来查找带有特别的名字。