首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将字符串转换为整数-从哈希中提取值

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

Stack Overflow用户
提问于 2015-02-24 21:45:44
回答 1查看 135关注 0票数 2

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

基本上,我试图创建一个名为$db_url的变量,其中包含数据库凭据、主机地址和名称。

当试图提取散列中的哈希值时,我将得到以下错误:

代码语言:javascript
复制
`[]': can't convert String into Integer (TypeError)

在这条线上:

代码语言:javascript
复制
$credentials = $svc_details["credentials"]

以下是背景:

代码语言:javascript
复制
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的一个例子:

代码语言:javascript
复制
{"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"
        }
    }
]}

我是一个编程新手,所以如果我错过了信息或者不懂什么,我很抱歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-24 21:51:41

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

如果您查看您的JSON,您将看到"mysql-5.1"在开始时引用了一个数组(包含在[]括号中),其中包含两个条目:一个以{ "name":"mysql-4f700"...开头,另一个以{ "name":"mysql-f1a13"...开头

这意味着当你写:

代码语言:javascript
复制
$svc_details = $vcap["mysql-5.1"]

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28706954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档