我从我的服务器抓取一个JSON哈希并尝试在我的ruby脚本中读取它。它似乎回到了错误的价值,除非我只是在忘记我的想法:
我是从一个函数中调用它的:
def get_functions(serial_number)
response = HTTParty.get("#{get_host_url}/v1/devices/#{serial_number}.json")
data = response['scan_option']
return data
end
这是返回的JSON:
{"can_scan"=>true, "can_brute_ssh"=>false, "can_brute_telnet"=>false, "can_brute_voip"=>false, "can_brute_smtp"=>false, "can_brute_pop3"=>false, "can_google_crawl"=>false, "can_scan_external_ip"=>false, "scan_ip_list"=>["10.10.10.1"], "exclude_ip_list"=>[]}
然后将其读入以下代码:
data.each do |d|
@can_scan = d['can_scan']
# ....
end
但是这会引发错误:
没有将String隐式转换为整数
答案 0 :(得分:1)
{foo: :bar}.each do |d|
p d
d['meow']
end
# => [:foo, :bar]
#! TypeError: no implicit conversion of String into Integer
Hash#each
产生一个两元素数组([key, value]
)。然后尝试使用d["can_scan"]
索引该数组,该数组失败,因为数组只能用整数索引。
而是直接访问值 - data['can_scan']
。
答案 1 :(得分:1)
我的意思是你的第三个片段(你称之为data
)中的data.each
是上面提到的哈希,实际上这很麻烦。在哈希上调用each
将对其键值对进行迭代,在d
的块data.each
中为其提供一个数组(其中包含[key, value]
对) 。
您可能只想致电data['can_scan']
。
请注意,Ruby中不需要方法防御结束时的return
。你可以这样做:
def get_functions(serial_number)
response = HTTParty.get("#{get_host_url}/v1/devices/#{serial_number}.json")
response["scan_option"]
end