Ruby在对象

时间:2016-02-28 14:38:56

标签: ruby json

我需要快速破解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
}

你有什么建议吗?

1 个答案:

答案 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相关,并且仅在字符串内有效(包含在双字符串中)