Я пытаюсь создать объект json и разместить его на веб-сервере. Я получаю эту ошибку при попытке загрузить: Invalid type in JSON write (__SwiftValue)
, я видел несколько сообщений, но они довольно старые или используют Alamofire / Swifty JSON, а я нет, поэтому я не мог понять, в чем проблема. Это мой объект:
struct Quantity: Codable {
var ml: Int
var price: Float
init(ml: Int, price: Float) {
self.ml = ml
self.price = price
}
}
struct Product: Codable {
let uuid: String
let productName: String
let productManufacturer: String
let productImage: String
let quantities: [Quantity]
let additionalInfo: String?
let storeID: String
let storeName: String
let ownerID: String
init(uuid: String, name: String, manufacturer: String, image: String, quantities: [Quantity], additionalInfo: String?, storeID: String, storeName: String, ownerID: String) {
self.uuid = uuid
self.productName = name
self.productManufacturer = manufacturer
self.productImage = image
self.quantities = quantities
self.additionalInfo = additionalInfo
self.storeID = storeID
self.storeName = storeName
self.ownerID = ownerID
}
}
Вот как я пытаюсь его загрузить:
func uploadProduct(product: Product ,completion: @escaping(Error?) -> Void) {
let jsonObject: [String: Any] = [
"product_id": product.uuid,
"name": product.productName,
"manufacturer": product.productManufacturer,
"image_url": product.productImage,
"quantities": product.quantities,
"additionalInfo": product.additionalInfo ?? "",
"store_id": product.storeID,
"store_name": product.storeName,
"owner_id": product.ownerID,
]
do {
let jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted)
//HTTP POST
guard let url = URL(string: ApplicationURLs.productCreation) else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData
_ = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
if let error = error {
completion(error)
return
}
if let response = response as? HTTPURLResponse {
if response.statusCode == 200 {
//Product was added.
completion(nil)
}else {
print(response.statusCode)
completion(error)
}
}
}).resume()
}catch { debugPrint("Couldn't create JSON Object...") }
}
Я даже не дохожу до блока catch, поэтому я не действительно знаю, откуда взялась ошибка.
Оба, Product
и Quantity
имеют CodingKeys
, совпадающие с json, которое я ожидаю и пытаюсь отправить, я просто удалил их из сообщения в не загромождайте его.