Ruby For loop through JSON 来自 API 的响应

Ruby For loop through JSON response from API

我有一段功能完美的代码,可以满足我的要求,但它确实很重,我相信通过在某处使用一个不错的 For 循环可以大大改进它,但我不确定如何去做

我的代码是:

def helper
response = RestClient.get API_RESPONSE
check_X_0 = JSON.parse(response.body)['EXP'][0]['X']
check_Y_0 = JSON.parse(response.body)['EXP'][0]['Y']
check_X_1 = JSON.parse(response.body)['EXP'][1]['X']
check_Y_1 = JSON.parse(response.body)['EXP'][1]['Y']
check_X_2 = JSON.parse(response.body)['EXP'][2]['X']
check_Y_2 = JSON.parse(response.body)['EXP'][2]['Y']
check_X_3 = JSON.parse(response.body)['EXP'][3]['X']
check_Y_3 = JSON.parse(response.body)['EXP'][3]['Y']
check_X_4 = JSON.parse(response.body)['EXP'][4]['X']
check_Y_4 = JSON.parse(response.body)['EXP'][4]['Y']
if check_X_0 == false && check_Y_0 == true
  exp_id = JSON.parse(response.body)['EXP'][0]['ABC']
elsif check_X_1 == false && check_Y_1 == true
  exp_id = JSON.parse(response.body)['EXP'][1]['ABC']
elsif check_X_2 == false && check_Y_2 == true
  exp_id = JSON.parse(response.body)['EXP'][2]['ABC']
elsif check_X_3 == false && check_Y_3 == true
  exp_id = JSON.parse(response.body)['EXP'][3]['ABC']
elsif check_X_4 == false && check_Y_4 == true
  exp_id = JSON.parse(response.body)['EXP'][4]['ABC']
else
  puts 'Nothing valid - use default'
  exp_id = JSON.parse(response.body)['EXP'][1]['ABC']
end

这太麻烦了,谁能帮我 trim 解决这个问题?

你不应该首先解析你的 json 10 次。解析一次并使用结果。

rb = RestClient.get(API_RESPONSE).body['EXP']

checks = (0..4).map { |i, s| [i, rb[i]['X'], rb[i]['Y']]  }
exp_id =
  if found = checks.detect { |_i, f, t| !f && t }
    rb[found.first]['ABC']
  else
    puts 'Nothing valid - use default'
    rb[1]['ABC']
  end