JSONSerialize и отправить JSON на сервер в Swift - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь отправить некоторые данные на сервер с помощью 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 голосов
/ 22 февраля 2019
 let resultSerialization: AnyObject? = try JSONSerialization.jsonObject(with: dataResponse, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

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

 }
...