2016-02-28 43 views
-3

我需要一個ruby腳本的快速入門,它爲一些變量解析json文件。它在#{name}中存儲json文件中的名稱字符串,其中id是參數的輸入。Ruby在一個對象中設置參數變量

問題是我無法在對象data-on_day_you_want中設置ID參數#{b}。如果我將它放在"#{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

我相信你想分析b爲整:

data_on_day_you_want = data_hash["tenantAuthzProfiles"].detect do |h| 
    h["id"] == b.to_i 
end 

在你的代碼,b接收值"281"這是一個字符串。當你比較字符串爲整數,它永遠是假的:

"281" == 281 
# => false 

to_i方法解析字符串,並返回它代表的整數值:

"281".to_i == 281 
# => true 

(注意,相反,其他語言的解析方法,to_i非常寬鬆,因此你可能會得到意想不到的結果"surprise".to_i == 0

#{}的符號是有關String interpolation,並且只在一個字符串內部有效(由雙焦點包圍)

+0

是的,但是我希望我給腳本的值作爲參數。就像下面的例子:./script.rb環境281 ...其中281是id值。 b.to_i無法正常工作,即使我更改了數字,它也顯示出相同的名稱值...主要原因是我無法正確設置#{b}以作爲變量進行讀取。 –

+0

對不起,隊友,您的解決方案正在工作。 ..我在錯誤的json上測試它:D ...如果你有一個鏈接或一個explotation爲什麼這個工作,爲什麼b.to_i知道我的輸入,這將是偉大的。再次感謝 –

+0

@ VladCenan - 我已經更新了一些更詳細的解釋和解釋 –