Недопустимый тип верхнего уровня в JSON write Swift 4 - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь научиться анализировать JSON.Я написал API в Laravel, который возвращает status : 200 в ответ.Я сделал следующее:

guard let url = URL(string: "http://localhost/workon-api/public/api/register") else { return }

    var request  = URLRequest(url: url)

    request.httpMethod = "POST"

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

    let newUser = User.init(name: "Rob", email: "abc@gmail.com", password: "12345678")

    do {

        let jsonBody = try JSONEncoder().encode(newUser)

        request.httpBody = jsonBody

    } catch { }

    URLSession.shared.dataTask(with: request) { (data, response, error) in

        guard let data = data else { return }

        do {

            let json = try JSONSerialization.data(withJSONObject: data, options: .prettyPrinted)

            print(json)

        } catch {}

    }.resume()

Теперь я получаю эту ошибку: Invalid top-level type in JSON write и сбой приложения.После поиска я использовал это:

let json = try JSONSerialization.jsonObject(with: data, options: [])

И это работает.Почему предыдущий метод не работает?И я получаю ответ, как это, если я пытаюсь вернуть собранный userInfo.

status = "{\"name\":\"Rob\",\"email\":\"abc@gmail.com\",\"password\":\"12345678\"}";

Почему там обратная косая черта?Это нормально?И что такое данные Gzip?Я знаю, что спрашиваю много, но мне нужно это понять.Заранее спасибо.

PS: Вот модель пользователя.

struct User: Encodable {

let name            : String?

let email           : String?

let password        : String?

}

1 Ответ

0 голосов
/ 22 октября 2018

Прежде всего, обратные слэши являются виртуальными.Фреймворк добавляет их, чтобы иметь возможность print двойных кавычек внутри литеральной строки.

Во-вторых dataTask возвращает сериализованный JSON Data, чтобы получить словарь или массив из данных, которые необходимо вызвать jsonObject(with.

let object = try JSONSerialization.jsonObject(with: data)
print(object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...