无法将字符串转换为整数 - 从散列中的散列中提取值
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 的适当部分,或者您可以编写一些代码来查找具有特定名称的条目。
我找到了很多非常相似的主题,但我只是漏掉了一些东西。 >.<
基本上,我正在尝试使用数据库凭据、主机地址和名称创建一个名为 $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 的适当部分,或者您可以编写一些代码来查找具有特定名称的条目。