我正在使用“Content-type”上传多个图像以及 JSON 数据:“multipart/form-data”
我的问题是,我有嵌套对象要传递给参数
我一直在寻找解决方案,我发现的是带有 String 或 Int 数组的嵌套数据,而不是另一个自定义对象(我为此苦苦挣扎了很长时间)
struct Car: Codable{
var id :Int,
var name:String,
var address:String,
var new:Bool
var users:[User]
}
struct User: Codable{
var id :Int,
var name:String,
var address:String,
var age:Int
}
我想将数据转换成字典以将其用作参数
func addNewCae(newCar:Car, images:[UIImage]){
let encoder = JSONEncoder()
let jsonData = try! encoder.encode(newCar)
let test = convertStringToDictionary(text: jsonData)
print(test)
let headers: HTTPHeaders
headers = ["Content-type": "multipart/form-data",
"Content-Disposition" : "form-data"]
AF.upload(multipartFormData: { multipartFormData in
for imageData in images {
guard let imgData = imageData.pngData() else { return }
multipartFormData.append(imgData , withName: "images[]", fileName: "image.jpeg", mimeType: "image/jpeg")
}
for (key, value) in self.convertStringToDictionary(text: jsonData)! {
multipartFormData.append("\(value)".data(using: .utf8)!, withName: key)
}
},to: "\(url)", usingThreshold: UInt64.init(),
method: .post,
headers: headers).responseString{ response in
switch response.result {
case .success(let value):
print(value)
break
case .failure(let error):
print(error)
}
}
}
func convertStringToDictionary(data: Data) -> [String:AnyObject]? {
do {
let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:AnyObject]
return json
} catch {
print("Something went wrong")
}
return nil
}
作为我的代码的请求:除用户字段外,所有汽车字段都在数据库中注册
(实际上,我有更多的领域)
为什么参数中没有添加用户字段?
任何想法?
用户提交的参数通常为 [[String: AnyObject]] 类型
这是我将其转换为字典后的数据
Optional(["name":"whatever" , "address": "here", "users": <__NSArrayM 0x6000008e4f90>(
{
"name" = "hello";
"address" = "there";
"age" = 20;
},
{
"name" = "hi";
"address" = "location";
"age" = 25;
}
)
, "new": 0])
希望足够清楚,如果需要更清楚,我可以添加任何进一步的代码或信息
谢谢
Update
我手动进行了编码,所以现在我有了 [String: AnyObject] 类型的正确字典格式,但其中之一是嵌套的:
["name":"whatever" , "address": "here", "users": [
[
"name" = "hello";
"address" = "there";
"age" = 20;
],
[
"name" = "hi";
"address" = "location";
"age" = 25;
]
]
, "new": 0]
但是,“用户”字段仍然无法读取,我想是因为参数不支持这种类型?
有人知道如何处理这些嵌套对象吗?