首页 > 解决方案 > 快速向 JSON 的主体添加值

问题描述

我正在尝试从 swift (issue_id) 向 JSON 的主体添加一个值,我到处搜索,但看起来没有人真正回答或问我的问题。我也尝试将它添加到显然失败的参数中。

身体

我知道如何添加参数和标题,但我不知道如何向正文添加值,这是代码

private func restAPI(path: String, method: String, params: [String: Any], callback: @escaping(_ result: [[String: Any]]) -> Void) {

    var url: String = ""

    if path == "/login" {
        let dict = dictConvert(dictionary: params)
        url = baseUrl + path + dict
    }
    else {
        url = baseUrl + path
    }

    guard let urlData = URL(string: url) else {
        callback([])
        return
    }

    print("===URL=== " + url)

    let request = NSMutableURLRequest(url: urlData)
    request.httpMethod = "POST"

    if let key = UserDefaults.standard.string(forKey: "auth-key") {
        print("===Authentication=== " + key)
        request.addValue(key, forHTTPHeaderField: "Authentication")
    }
    let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler:{ (data, _ , error) in

        if error == nil {
            do {
                let stringData = String(data: data!, encoding: String.Encoding.utf8) as String!
                print("Data === " + (stringData ?? "nil"))

                if let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSArray {

                    guard let jsonArray = json as? [[String: Any]] else {
                        callback([])
                        return
                    }

                    callback(jsonArray)

                }
                else if let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary {

                    guard let jsonArray = json as? [String: Any] else {
                        callback([])
                        return
                    }

                    callback([jsonArray])

                }
                else {
                    callback([])
                }

            }
            catch _ {
                callback([])
            }
        }
    })
    task.resume()
}

标签: jsonswift

解决方案


您需要使用类型为 Data 的 request.httpBody 并传递正文

 let bodyDictionary: [String: Any] = ["key1": value1,
                                         "key2": value2]
  let requestBodyData = try? JSONSerialization.data(withJSONObject: bodyDictionary, options: [])
    request.httpBody = requestBodyData

推荐阅读