简单JSON在Ruby中不起作用

简单JSON在Ruby中不起作用,ruby,json,Ruby,Json,代码: 您可以在这里看到JSON响应: 控制台: #!/usr/bin/ruby require 'rubygems' require 'open-uri' require 'json' def getData file = open("http://goo.gl/BI6h7a") @json = JSON.parse(file.read) end getData cveIds = @json['cve_id'] puts cveIds /cve.rb:13:in`[]:

代码:

您可以在这里看到JSON响应:

控制台:

#!/usr/bin/ruby
require 'rubygems'
require 'open-uri'
require 'json'

def getData
    file = open("http://goo.gl/BI6h7a")
    @json = JSON.parse(file.read)
end

getData

cveIds = @json['cve_id']
puts cveIds
/cve.rb:13:in`[]:无法将字符串从./cve.rb:13:in``转换为整数(TypeError)
我不知道为什么会这样。“将字符串转换为整数”?什么


@json
可以很好地获取内容,但是
cveIds
不能。

我不是
ruby
开发人员,但是你有一个字典列表。 我猜为了让您阅读
cve\u id
,您需要创建某种for循环

例如,在
python
中,我会这样写:

./cve.rb:13:in `[]': can't convert String into Integer (TypeError) from ./cve.rb:13:in `<main>'
for line in my_data:
  print line['cve_id']
for i in @json do
    cveIds = i['cve_id']
    puts cveIds
end
我猜在ruby中它会是这样的:

./cve.rb:13:in `[]': can't convert String into Integer (TypeError) from ./cve.rb:13:in `<main>'
for line in my_data:
  print line['cve_id']
for i in @json do
    cveIds = i['cve_id']
    puts cveIds
end

我不是一个
ruby
开发者,但是你有一个字典列表。 我猜为了让您阅读
cve\u id
,您需要创建某种for循环

例如,在
python
中,我会这样写:

./cve.rb:13:in `[]': can't convert String into Integer (TypeError) from ./cve.rb:13:in `<main>'
for line in my_data:
  print line['cve_id']
for i in @json do
    cveIds = i['cve_id']
    puts cveIds
end
我猜在ruby中它会是这样的:

./cve.rb:13:in `[]': can't convert String into Integer (TypeError) from ./cve.rb:13:in `<main>'
for line in my_data:
  print line['cve_id']
for i in @json do
    cveIds = i['cve_id']
    puts cveIds
end

您正在读取的json中的顶部元素实际上是一个数组,它的每个元素实际上都是一个散列,如下所示:

./cve.rb:13:in `[]': can't convert String into Integer (TypeError) from ./cve.rb:13:in `<main>'
for line in my_data:
  print line['cve_id']
for i in @json do
    cveIds = i['cve_id']
    puts cveIds
end
所以
@json
是一个数组。如果您想访问它的任何元素,您必须使用数字整数索引来访问它,如:

[
    {
        "cve_id": "CVE-2014-3976"
        // other key/value pairs
    }
    {
        "cve_id": "CVE-2014-3975"
        // other key/value pairs
    }
    {
        "cve_id": "CVE-2014-3974"
        // other key/value pairs
    }
    // .... more hashes
]
我认为您正在尝试收集所有这些散列的
cve\u id
字段,可以按如下方式完成:

@json[0] # => { "cve_id": "CVE-2014-3976", // other key/value pairs }

您正在读取的json中的顶部元素实际上是一个数组,它的每个元素实际上都是一个散列,如下所示:

./cve.rb:13:in `[]': can't convert String into Integer (TypeError) from ./cve.rb:13:in `<main>'
for line in my_data:
  print line['cve_id']
for i in @json do
    cveIds = i['cve_id']
    puts cveIds
end
所以
@json
是一个数组。如果您想访问它的任何元素,您必须使用数字整数索引来访问它,如:

[
    {
        "cve_id": "CVE-2014-3976"
        // other key/value pairs
    }
    {
        "cve_id": "CVE-2014-3975"
        // other key/value pairs
    }
    {
        "cve_id": "CVE-2014-3974"
        // other key/value pairs
    }
    // .... more hashes
]
我认为您正在尝试收集所有这些散列的
cve\u id
字段,可以按如下方式完成:

@json[0] # => { "cve_id": "CVE-2014-3976", // other key/value pairs }
你在这里做什么相当于:

cveIds = @json['cve_id']
因此,您会收到关于Ruby试图将
字符串
转换为
int
的错误消息

请尝试以下方法

arr = [1, 2, 3, 4]
puts arr["hello"] # using a string here on an indexed based array!
在上面的代码示例中,我们从数组中获取第一个元素,这是一个散列,我们可以从中访问
cve\u id

你在这里做什么相当于:

cveIds = @json['cve_id']
因此,您会收到关于Ruby试图将
字符串
转换为
int
的错误消息

请尝试以下方法

arr = [1, 2, 3, 4]
puts arr["hello"] # using a string here on an indexed based array!

在上面的代码示例中,我们从数组中获取第一个元素,这是一个散列,我们可以从中访问
cve\u id

谢谢,它正在工作。这个
.collect
遍历数组并创建一个var
h
并获取每个ID,对吗?@collect方法将遍历
数组
并在每次迭代中
h
是当前元素的名称。
collect
的结果是一个新数组,它的值是每次迭代返回的值,在我们的例子中是
h[“cve\u id”]
。为了更好地理解它,你需要练习:)这就是我在这里所做的,练习,创建一些“一无是处”的程序。谢谢(:谢谢,它正在工作。这个
.collect
迭代数组,创建一个var
h
并获取每个ID,对吗?@Juan
.collect
方法将迭代
数组
的方法,在每个迭代中
h
是当前元素的名称。
collect
的结果是一个新数组,其值为每次迭代返回的值,在我们的例子中是
h[“cve_id”]
。为了更好地理解它,您需要练习:)这就是我在这里所做的,练习,创建一些“一无是处”的程序。谢谢(:用最简单的话来说。
JSON.parse(file.read)
返回记录数组。因此,将其解析为数组,您就可以用最简单的单词完成操作。
JSON.Parse(file.read)
返回记录数组。因此,将其解析为数组,您就完成了操作