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