我需要快速破解ruby脚本,该脚本解析一些变量的json文件。它在#{name}中存储json文件中的名称字符串,其中id是参数的输入。
问题是我无法在对象data-on_day_you_want中设置#{b}
的ID参数。如果我把它放在"#{b}"
中它将与json文件中的值不匹配。如果我用281硬编码它就可以完美地工作。
ps:请在下面找到json的一小部分。
#!/usr/bin/env ruby
require 'rubygems'
require 'json'
a, b = ARGV #(environment and ID arguments)
file = File.read('file.json')
data_hash = JSON.parse(file)
data_on_day_you_want = data_hash["tenantAuthzProfiles"].detect{ |h| h["id"] == #{b} } # HERE IS THE ISSUE
name = data_on_day_you_want["name"]
puts "NAME is: #{name}"
json:
{
"name": "Production Environment",
"roles": ["Host Admin"],
"id": 281
}
你有什么建议吗?
答案 0 :(得分:1)
我相信您要将b
解析为整数:
data_on_day_you_want = data_hash["tenantAuthzProfiles"].detect do |h|
h["id"] == b.to_i
end
在您的代码中,b
会收到值为"281"
的字符串。将字符串与整数进行比较时,它将始终为false:
"281" == 281
# => false
to_i
方法解析字符串,并返回它代表的整数值:
"281".to_i == 281
# => true
(请注意,与其他语言的解析方法相反,to_i
非常宽松,因此您可能会得到令人惊讶的结果"surprise".to_i == 0
)
#{}
的符号与String interpolation相关,并且仅在字符串内有效(包含在双字符串中)