Ruby For цикл через ответ JSON от API - PullRequest
0 голосов
/ 24 августа 2018

У меня есть совершенно функциональный кусок кода, который делает то, что я хочу, но он действительно тяжелый, и я уверен, что его можно значительно улучшить, используя где-нибудь хороший цикл 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

Это довольно громоздко, поэтому кто-нибудь может мне помочь урезать это?

1 Ответ

0 голосов
/ 24 августа 2018

Во-первых, вы не должны анализировать свой 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
...