在swift中格式化JSON:JSON写入中的类型无效(OS_dispatch_数据)

在swift中格式化JSON:JSON写入中的类型无效(OS_dispatch_数据),json,swift,Json,Swift,我正在尝试向和api发送一个post请求,其中包含一个可以是图像或文本的“项目”列表 然而,我一直收到一个错误(列在标题中) 下面是将我的对象转换为JSON的代码 var json = [String: Any]() var jsonItems = [Any]() for i in 0...(items.count - 1){ var it = [String: Any]() if let imageData = items[i].im

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

然而,我一直收到一个错误(列在标题中)

下面是将我的对象转换为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
是否有任何原因导致此文件格式不正确

编辑:

jpgData函数

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
        }
    }
}
除了我的示例代码之外,将创建的dict作为Alamofire请求、URLSession请求等的参数传递都会导致崩溃,并出现标题中的错误

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

数据不能放入JSON。必须对数据对象进行编码。可能使用base64编码。

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

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

查看此答案以了解更多信息

返回的是什么类型的
jpgData()
JSON不支持原始数据。您需要将图像数据转换为base64encodedString,才能将其发送到您的json@daredevil1234您发布的代码没有给出错误。您发布的代码不做任何JSON处理,它只是构建了一个字典。用实际给出错误的代码更新您的问题。已更新。参见编辑