Я работаю с API, который принимает некоторые объекты JSON (отправляется как почтовый запрос) и не выполняет другие действия на основе определенных критериев.Как выбрать объекты из файла JSON и вставить новый файл, если они не соответствуют проверке API
Я пытаюсь скомпилировать «журнал» объектов, которые потерпели неудачу, и те, которые были успешно проверены, поэтому мне не нужно вручную копировать и вставлять их каждый раз. (Есть сотни объектов).
В принципе, если API возвращает «false», я хочу, чтобы этот объект был вложен в файл, и если он возвращает true, все эти объекты переходят в другой файл.
Я попытался прочитать кучу документации/блогов на «select, detect, reject» и т. Д. Перечислениях, но моя проблема сильно отличается от приведенных примеров.
Я написал несколько псевдо-код в моем файле рубина ниже, и я думаю, что я иду в правильном направлении, но нужно немного указаний для выполнения задачи:
restaurants = JSON.parse File.read('pretty-minified.json')
restaurants.each do |restaurant|
create_response = HTTParty.post("https://api.hailoapp.com/business/create",
{
:body => restaurant.to_json,
:headers => { "Content-Type" => "text", "Accept" => "application/x-www-form-urlencoded", "Authorization" => "token #{api_token}" }
})
data = create_response.to_hash
alert = data["valid"]
if alert == false
# select restaurant json objects which return false and push into new file
# false_rest = restaurants.detect { |r| r == false }
File.open('false_objects.json', 'w') do |file|
file << JSON.pretty_generate(false_rest)
else
# select restaurant json objects which return true and push into another file
File.open('true_objects.json', 'w') do |file|
file << JSON.pretty_generate()
end
end
Пример вывода (JSON) из API выглядит следующим образом:
{"id":"102427","valid":true}
{"valid":false}
файл JSON в основном огромный массив хэшей (или объектов), вот короткая выдержка:
[
{
"id": "223078",
"name": "3 South Place",
"phone": "+442032151270",
"email": "[email protected]",
"website": "",
"location": {
"latitude": 51.5190536,
"longitude": -0.0871038,
"address": {
"line1": "3 South Place",
"line2": "",
"line3": "",
"postcode": "EC2M 2AF",
"city": "London",
"country": "UK"
}
}
},
{
"id": "210071",
"name": "5th View Bar & Food",
"phone": "+442077347869",
"email": "[email protected]",
"website": "http://www.5thview.com",
"location": {
"latitude": 51.5089594,
"longitude": -0.1359897,
"address": {
"line1": "Waterstone's Piccadilly",
"line2": "203-205 Piccadilly",
"line3": "",
"postcode": "W1J 9HA",
"city": "London",
"country": "UK"
}
}
},
{
"id": "239971",
"name": "65 & King",
"phone": "+442072292233",
"email": "[email protected]",
"website": "http://www.65king.com/",
"location": {
"latitude": 51.5152533,
"longitude": -0.1916538,
"address": {
"line1": "65 Westbourne Grove",
"line2": "",
"line3": "",
"postcode": "W2 4UJ",
"city": "London",
"country": "UK"
}
}
}
]
Да, я знаю, что данные не рубин, но я разбора JSON и обработки списка объектов JSON как хэши в массиве. – daneasterman
Затем 'JSON.parse' выведет из него массив, а следующий [' group_by'] (http://ruby-doc.org/core-2.0.0/Enumerable.html#method-i-group_by) будет разделите этот массив на две части по мере необходимости. – mudasobwa
Спасибо @mudasobwa, это правильный синтаксис квадратной скобки? Могу ли я написать файл в нем, и он будет работать? – daneasterman