swift json parse возврат необязательный - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь быстро проанализировать ответ json и с трудом справляюсь с задачей. когда я ссылаюсь на верхний уровень строки json и печатаю значение, я получаю Optional (<__ NSSingleObjectArrayI), а затем значение json </p>

при выводе на консоль я получаю:

Optional(<__NSSingleObjectArrayI 0x1c0014180>(
{
ack =     (
    Success
);
paginationOutput =     (
            {

тогда остальная часть JSON

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

код, выполняющий синтаксический анализ, выглядит следующим образом

URLSession.shared.dataTask(with: endpoint) { (data, response, error) in
        do {
            guard let data = data else {
                return
            }
            guard let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? NSDictionary else {
                return
            }

            //print(json)
            print(json.object(forKey: "findCompletedItemsResponse"))
            let dictionary1 = json.object(forKey: "findCompletedItemsResponse")

            print(dictionary1)
        } catch let error {
            print(error)
        }
        }.resume()

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Нет необходимости .allowFragments в быстром.

Если ваш json["findCompletedItemsResponse"] является словарным типом, он может быть проанализирован следующим образом:

URLSession.shared.dataTask(with: endpoint) { (data, response, error) in
    do {
        guard let data = data, let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] else {
            return
        }

        if let dictionary1 = json["findCompletedItemsResponse"] as? [String: Any] {
             print(dictionary1)
        } else {
            print(json["findCompletedItemsResponse"])
        }
    } catch let error {
        print(error)
    }
    }.resume()
0 голосов
/ 08 мая 2018

Используйте if-let, чтобы развернуть такие значения, как:

if let dictionary1 = json.object(forKey: "findCompletedItemsResponse") {
print(dictionary1)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...