Json 如何使用不同的对象发出此POST请求? 概述:

Json 如何使用不同的对象发出此POST请求? 概述:,json,swift,post,Json,Swift,Post,我正在尝试提出一个POST请求,这是我以前只使用字符串完成的。这一次,我有几个变量,分别是:String、Int和Bool 错误: 无法将[String:Any]类型的值分配给类型数据 导致错误的行: request.httpBody=paramToSend 问题: 如何将词典转换为数据 完整代码: 编辑: 我已经尝试了这个新代码,但它仍然没有发布到服务器上。我附加了我所改变的,也写了控制台显示的两个打印我有它做 let paramToSend = ["message":

我正在尝试提出一个POST请求,这是我以前只使用字符串完成的。这一次,我有几个变量,分别是:
String
Int
Bool

错误:
无法将[String:Any]类型的值分配给类型数据

导致错误的行:
request.httpBody=paramToSend

问题:
  • 如何将
    词典
    转换为
    数据
完整代码: 编辑:

我已经尝试了这个新代码,但它仍然没有发布到服务器上。我附加了我所改变的,也写了控制台显示的两个打印我有它做

let paramToSend = ["message":writeTextField.text!,"recipient":1,"is_public":isPrivate] as [String : Any] //messageString + recipientString + isPublicString
            
            do {
                var serialized = try JSONSerialization.data(withJSONObject: paramToSend, options: .prettyPrinted)
                print(serialized)
                request.httpBody = serialized
                print(request.httpBody)
            } catch {
                print("found a problem")
            }
控制台返回(对于序列化,然后是HTTP正文): 113字节 可选(113字节)


这是导致问题的原因吗?如何修复它?

要将
字典
转换为
数据
,请使用
JSONSerialization.Data

解决方案:
JSONSerialization.data(带jsonObject:paramToSend,选项:。预打印)

检查请求:

  • 打印请求并查看它是否符合您的期望
阅读答复:
事实证明,我需要添加一个简单的附加标题,以使整个工作正常进行

request.setValue("application/json", forHTTPHeaderField: "Content-Type")

这可能就是它不理解我发送的词典的原因。

它告诉您将词典转换为数据。@ElTomato我该怎么做?@ElTomato我尝试了多个代码,但当我将其放入HTTP时,它仍然不起作用body@LeviK只是一个小小的建议,一旦你发现一个错误,隔离该行,并让问题特定于该行/problem@user1046037谢谢,对不起,我对这一切还是新手。我在你的解决方案中添加了一条评论,希望你仍能提供帮助。谢谢嗨,我试过这个,但还是不起作用。这就是我所做的,没有任何东西发布到后端:
let paramToSend=[“message”:message,“recipient”:recipient,“is_public”:isPublic]as[String:Any]do{request.httpBody=try JSONSerialization.data(with jsonobject:paramToSend,options:.prettyPrinted)}catch{print(“发现问题”)}
编译错误已经解决了吗?现在是运行时问题,您没有得到预期的输出吗?打印请求,看看它是否符合您的预期。我在帖子中添加了一个更新的部分,其中包含打印的请求,希望您能告诉我如何根据响应修复它。我们需要查看打印语句的输出。因此,粘贴打印语句的输出,或者检查它是否符合预期。
//Check if there is any error (check if error != nil)

//Examine the response
let statusCode = (response as? HTTPURLResponse)?.statusCode
let statusCodeDescription = (response as? HTTPURLResponse)?.localizedString(forStatusCode: httpResponse.statusCode)

//Check Data
if let data = data {
    let dataString = String(data: data, encoding: String.Encoding.utf8)
}
request.setValue("application/json", forHTTPHeaderField: "Content-Type")