GOOGLE ADS

воскресенье, 24 апреля 2022 г.

Не могу найти способ декодирования/Использовать данные, которые я получаю при вызове API Amadeus

Я новичок в Amadeus API, я не могу понять, как использовать данные, которые я получаю от вызова API. Могу распечатать данные. Может ли кто-нибудь направить меня в правильном направлении? Или, может быть, покажите мне самый простой способ использования данных в моем приложении?

Я импортирую Amadeus и создаю Struct, соответствующий кодируемости.

struct Response: Codable {
var results = [Result]()
}
struct Result: Codable{
struct price: Codable {
let total: String
}
struct links: Codable {
let flightDates: String
let flightOffers: String
}
let type: String
let origin: String
let destination: String
let departureDate: String
let returnDate: String
let price: price
let links: links
}

Затем у меня есть функция, которая делает вызов API ->

func testFlightDestinations() {
amadeus.shopping.flightDestinations.get(
params: ["origin": "MAD", "departureDate": "2022-04-20", "duration": "5"],
onCompletion: {
result in
switch result {
case.success(let response):
print(response.data[0])

case.failure(let error):
print("Fail\(error)")
}
})
}

Теперь все работает нормально, я могу распечатать response.data[0], но независимо от того, как я пытаюсь его расшифровать, я не могу использовать эти данные… Может ли кто-нибудь с опытом работы с Amadeus помочь мне?

Вот моя последняя версия расшифровки:

func testFlightDestinations() async {
amadeus.shopping.flightDestinations.get(
params: ["origin": "MAD", "departureDate": "2022-04-20", "duration": "5"],
onCompletion: {
result in
switch result {
case.success(let response):
print(response.data[0])

let data = response.data
let decoder = JSONDecoder()
do{
let decodedData = try decoder.decode(Response, from: response.data)
print(results[0].origin)
} catch {
print("error")
}

case.failure(let error):
print("Fail\(error)")
}
})
}

}

Пример JSON:

[{
"departureDate": "2022-04-20",
"origin": "MAD",
"links": {
"flightOffers": "https:\/\/test.api.amadeus.com\/v2\/shopping\/flight-offers?originLocationCode=MAD&destinationLocationCode=PMI&departureDate=2022-04-20&returnDate=2022-04-25&adults=1&nonStop=false",
"flightDates": "https:\/\/test.api.amadeus.com\/v1\/shopping\/flight-dates?origin=MAD&destination=PMI&departureDate=2022-04-20&oneWay=false&duration=5&nonStop=false&viewBy=DURATION"
},
"destination": "PMI",
"type": "flight-destination",
"returnDate": "2022-04-25",
"price": {
"total": "46.39"
}

},

Новая структура из app.quicktype.io =

struct Result: Codable {
let type, returnDate, destination: String
let price: Price
let origin, departureDate: String
let links: Links
}
struct Links: Codable {
let flightOffers, flightDates: String
}
struct Price: Codable {
let total: String
}

Из файла README в Amadeus SDK: ## Ответ

Ответы основаны на быстрых замыканиях, которые представляют собой автономные блоки функций, которые можно передавать и использовать в вашем коде.

Каждый ответ на вызов API обрабатывается OnCompletionзамыканием, которое возвращает значение Result, представляющее либо успех, содержащий JSONобъект, либо отказ, содержащий ошибку.

Если вызов API содержит ответ в формате JSON, пакет SDK преобразует этот JSON в
.resultатрибут. Если он содержит dataключ, он доступен в
.dataатрибуте. Необработанное тело ответа всегда доступно в .body атрибуте.


Решение проблемы

Доброе утро,

вы просмотрели этот репозиторий:
https://github.com/amadeus4dev/amadeus-code-examples

Вы можете найти несколько примеров со Swift.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...