Вам необходимо сериализовать json
, например, с помощью JSONSerialization.data(withJSONObject:options)
:
Например,
let phone: [String: Any] = [
"description": "Main phone",
"number": "555444333"
]
let booking: [String: Any] = [
"sendSms": false,
"order": "8724897",
"priority": 2,
"phone": phone
]
let json: [String: Any] = [
"confirm": true,
"booking": [booking]
]
do {
let data = try JSONSerialization.data(withJSONObject: json)
...
} catch {
print(error)
}
Или вы можете использовать Codable
типы, а затем использовать JSONEncoder
:
struct Phone: Codable {
let description: String
let number: String
}
struct Booking: Codable {
let sendSms: Bool
let order: String
let priority: Int
let phone: Phone
}
struct Bookings: Codable {
let confirm: Bool
let booking: [Booking]
}
let phone = Phone(description: "Main phone", number: "555444333")
let booking = Booking(sendSms: false, order: "8724897", priority: 2, phone: phone)
let bookings = Bookings(confirm: true, booking: [booking])
do {
let data = try JSONEncoder().encode(bookings)
...
} catch {
print(error)
}
Вы говорите, что сервер ожидает JSON в следующей форме:
{
"confirm": true,
"booking": [
{
"sendSms": false,
"order": "8724897",
"priority": 2,
"phone": {
"description": "Main phone",
"number": "555444333"
}
}
]
}
Это то, что сгенерировано выше. Ключ booking
- это массив (в квадратных скобках), содержащий только один элемент.
Но вы также можете предположить, что сервер жалуется на квадратные скобки. Интересно, может ли сервер ожидать простой словарь, например,
{
"confirm": true,
"booking": {
"sendSms": false,
"order": "8724897",
"priority": 2,
"phone": {
"description": "Main phone",
"number": "555444333"
}
}
}
Если booking
- это всегда только один элемент, это будет более привычный формат. В этом случае код будет:
let phone: [String: Any] = [
"description": "Main phone",
"number": "555444333"
]
let booking: [String: Any] = [
"sendSms": false,
"order": "8724897",
"priority": 2,
"phone": phone
]
let json: [String: Any] = [
"confirm": true,
"booking": booking // note, not an array, but single item
]
do {
let data = try JSONSerialization.data(withJSONObject: json)
...
} catch {
print(error)
}
или
struct Phone: Codable {
let description: String
let number: String
}
struct Booking: Codable {
let sendSms: Bool
let order: String
let priority: Int
let phone: Phone
}
struct Confirmation: Codable {
let confirm: Bool
let booking: Booking
}
let phone = Phone(description: "Main phone", number: "555444333")
let booking = Booking(sendSms: false, order: "8724897", priority: 2, phone: phone)
let confirmation = Confirmation(confirm: true, booking: booking)
do {
let data = try JSONEncoder().encode(confirmation)
...
} catch {
print(error)
}