我只是在密钥self
有值时尝试仅设置密钥escalation_policies
的值。这是一个没有升级政策的计划示例,因此我不想要密钥的值self
{"schedules"=>
[{"id"=>"0000000",
"type"=>"schedule",
"summary"=>"-PROD-",
"self"=>"https://api.pagerduty.com/schedules/",
"html_url"=>"https://pagerduty.com/schedules/",
"name"=>"-PROD-",
"time_zone"=>"America/",
"description"=>nil,
"privilege"=>nil,
"users"=>
[{"id"=>"0000000",
"type"=>"user_reference",
"summary"=>"DOo Kkkk",
"self"=>"https://api.pagerduty.com/users/",
"html_url"=>"https://target.pagerduty.com/users/"}],
"escalation_policies"=>[],
"teams"=>[]},
}
我征服这一挑战的代码是:
somefile = File.open("Schedule_Api.txt", "a+")
jdoc.fetch("schedules").each do |schedule|
somefile.puts schedule["self"] if schedule["escalation_policies"].exists? == true
end
somefile.close
此变量jdoc
是网站的卷曲。这是我得到的结果undefined method
是否存在?' for []:Array(NoMethodError). Is there another alternative to this then the method
是否存在?`。任何帮助都会有所帮助!谢谢!
答案 0 :(得分:1)
.exists?
是来自ActiveRecord的方法,而不是来自Array。
如果要测试空数组,可能需要执行
somefile.puts schedule["self"] unless schedule["escalation_policies"].empty?
如果您想测试任何值,只需执行
somefile.puts schedule["self"] if schedule["escalation_policies"]
应该有效
答案 1 :(得分:0)
尝试:
if schedule.has_key?("escalation_policies")
您还可以测试:
if schedule["escalation_policies"]
不仅在密钥不存在时返回false,而且如果密钥存在,则返回false,并且其对应的值为nil。
如果缺少值总是由空数组([]
)表示,那么您可以使用Rick Sullivan在其答案中提到的schedule["escalation_policies"].empty?
,或schedule["escalation_policies"].any?
来测试阵列大小> 0