【问题标题】:make post request with dictionary and utf-8 in swift在 swift 中使用字典和 utf-8 进行发布请求
【发布时间】:2018-07-13 10:05:32
【问题描述】:

我需要发出一个 post 请求以在 post 请求的正文中发送一个字典,该字典需要用 utf-8 编码, 我在下面尝试了这个,但它给出了一个错误:

  let DicObject: NSMutableDictionary = NSMutableDictionary()
        DicObject.setValue("cf", forKey: "a")
        DicObject.setValue("", forKey: "scs")
        DicObject.setValue("Uploads/" + nameOfFile, forKey:"p")

当我尝试制作时

 request.httpMethod = "POST"
      //  request.httpBody = jsonObject as Data
        request.addValue("Content-Type", forHTTPHeaderField: "application/x-www-form-urlencoded; charset=utf-8")

不起作用,有谁知道如何将jsonObject编码转换为utf-8

谢谢。

【问题讨论】:

  • 将您的 Json 对象转换为字符串并传入 POST 请求。
  • 它不起作用,错误消息:无法将类型“NSMutableDictionary”的值强制转换为类型“NSString”。并尝试这样: let convert = (DicObject as NSString).utf8String
  • 请试试我的答案!

标签: json swift utf-8


【解决方案1】:

您可以使用JSONSerializationjsonObject 转换为data

if let data = try? JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted)
     request.httpBody = data
}

【讨论】:

  • 有什么办法可以转换成普通字节吗?不是 json
  • @Steven 是的,String.init(bytes: bytes, encoding: .utf8)Data.init(bytes: bytes) 选择适合你的。
  • 谢谢。但我收到错误:当我尝试 let convert = Data.init(bytes: DicObject) 时,无法使用类型为“(字节:NSMutableDictionary)”的参数列表调用“Data.Type.init”。
  • DicObject 不是字节,因此编译器不允许您将其作为字节传递。有什么理由不使用JSONSerialization 来获取data
  • 因为服务器不支持Json,所以只需要转成utf-8再发送即可。
【解决方案2】:

试试这个,

 let jsonData: NSData

 do {
        jsonData = try JSONSerialization.data(withJSONObject: DicObject, options: JSONSerialization.WritingOptions()) as NSData
        let jsonString = NSString(data: jsonData as Data, encoding: String.Encoding.utf8.rawValue)! as String
        print("json string = \(jsonString)")
        print("json jsonData = \(jsonData)")

   } catch _ {
           print ("JSON Failure")
   }

谢谢!

【讨论】:

    【解决方案3】:

    你可以使用这个 Alamofire 方法

          mydict = [:] // Your parameters here
    
          if let theJSONData = try? JSONSerialization.data(
                withJSONObject: mydict,
                options: []) {
                let theJSONText = String(data: theJSONData,
                                         encoding: .ascii)
                multipartFormData.append((theJSONText?.data(using: .utf8)!)!, withName: "bulkData")
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多