如果键有值,则打印值ruby

时间:2017-12-01 23:07:31

标签: json ruby hash key

我只是在密钥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是否存在?`。任何帮助都会有所帮助!谢谢!

2 个答案:

答案 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