JSONSerialize并将JSON发布到Swift中的服务器

时间:2019-02-22 12:21:49

标签: ios json swift json-serialization

我正在尝试使用Swift将一些数据发布到服务器:

要创建JSON,请执行以下操作。

let json: [String: Any] = ["jwt": jwt as Any, "comment": newmessage as Any,"isuser": true,"ismax": false]

这似乎起作用,因为调试器显示了下面列出的4个键值对。然后,我尝试使用以下方法进行序列化:

 let jsonData = try? JSONSerialization.data(withJSONObject: json)

这似乎不起作用,因为jsonData对象以0字节的身份记录到调试器中。

我的发送代码是:

 let url = URL(string: "https://api-endpoint")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"

        request.httpBody = jsonData

        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data, error == nil else {
                print(error?.localizedDescription ?? "No data")
                return
            }
            let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
            if let responseJSON = responseJSON as? [String: Any] {
                print(responseJSON)
            }
        }

        task.resume()
    }

尽管编译器没有抱怨,但在调试器中,我可以看到jsonData有0个字节,并且json似乎没有被发送。

我的代码有什么问题

值得注意的是,编译器强迫我将某些数据转换为Any,尽管我知道它们是字符串。 json对象在调试器中显示为:

(lldb) po json
▿ 4 elements
  ▿ 0 : 2 elements
    - key : "comment"
    ▿ value : Optional<String>
      - some : "Hi"
  ▿ 1 : 2 elements
    - key : "isuser"
    - value : true
  ▿ 2 : 2 elements
    - key : "ismax"
    - value : false
  ▿ 3 : 2 elements
    - key : "jwt"
    ▿ value : Optional<String>
      - some : "<-Long hash token ie string->"

1 个答案:

答案 0 :(得分:-1)

 let resultSerialization: AnyObject? = try JSONSerialization.jsonObject(with: dataResponse, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

 if (resultSerialization is [AnyHashable: Any]) == true 
{
    dictionaryResponse = resultSerialization as? NSMutableDictionary

 }