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

Can't Convert String into Integer - Extract Values from Hash within a Hash

我找到了很多非常相似的主题,但我只是漏掉了一些东西。 >.<

基本上,我正在尝试使用数据库凭据、主机地址和名称创建一个名为 $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"
        }
    }
]}

我是编程新手,所以如果我遗漏了信息或不明白的地方,我深表歉意。

can't convert String into Integer (TypeError) 错误是因为 $svc_details 是一个数组,即您使用数字索引 select 您想要但尝试使用的条目的列表字符串 "credentials" 作为数组的索引。

如果您查看 JSON,您会发现开头的 "mysql-5.1" 指的是一个包含 2 个条目的数组(由 [] 括号括起来):一个以 { "name":"mysql-4f700"... 开头,第二个以 { "name":"mysql-f1a13"...

开头

这意味着当你写:

$svc_details = $vcap["mysql-5.1"]

那么 $svc_details 是一个有 2 个元素的数组,所以你不能直接进入 "credentials"

如果您知道您想要第一个还是第二个条目,那么您可以使用 $svc_details = $vcap["mysql-5.1"][0]$svc_details = $vcap["mysql-5.1"][1] 到 select JSON 的适当部分,或者您可以编写一些代码来查找具有特定名称的条目。