gpt4 book ai didi

json - 在 swift : Invalid type in JSON write (OS_dispatch_data) 中格式化 JSON

转载 作者:行者123 更新时间:2023-11-28 14:15:32 26 4
gpt4 key购买 nike

我正在尝试向 api 发送一个发布请求,其中包含可以是图像或文本的“项目”列表。

但是,我一直收到错误(在标题中列出)

这是将我的对象转换为 JSON 的代码

    var json = [String: Any]()
var jsonItems = [Any]()

for i in 0...(items.count - 1){

var it = [String: Any]()
if let imageData = items[i].image?.jpgData(){
it["image"] = imageData
}

if let text = items[i].text{
it["text"] = text
}

if i == 0 {
it["is_profile"] = true
it["face_detected"] = faceDetected
}

jsonItems.append(it)
}
json["items"] = jsonItems

有什么原因导致格式不正确吗?

编辑:

jpg数据函数

func jpgData() -> Data? {
return UIImageJPEGRepresentation(self, 0.8)
}

导致崩溃的示例代码:

extension Dictionary {
var json: String {
let invalidJson = "Not a valid JSON"
do {
let jsonData = try JSONSerialization.data(withJSONObject: self, options: .prettyPrinted)
return String(bytes: jsonData, encoding: String.Encoding.utf8) ?? invalidJson
} catch {
return invalidJson
}
}
}

除了我的示例代码之外,将创建的字典作为参数传递给 Alamofire 请求、URLSession 请求等都会导致崩溃并出现标题错误

编辑:解决方案图像数据确实需要编码。事后看来很明显。 Base64 编码用于像我的扩展中那样打印出结构,但对于网络请求,我最终使用了 Alamofire 的 MultipartFormData 类(围绕它的自定义包装器)并附加为 mimetype 的 application/octet-stream .希望我可以在这里使用 facepalm 表情符号。我接受了两个关于编码的答案之一,实际上有示例代码。

最佳答案

转换为 JPEG 数据后尝试编码为 base64

let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)

查看此答案以获取更多信息 Convert between UIImage and Base64 string

关于json - 在 swift : Invalid type in JSON write (OS_dispatch_data) 中格式化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com