Проблемы с разбором JSON с помощью Swift с использованием SwiftyJSON

Я новичок в Swift, и я пытаюсь проанализировать некоторые простые данные JSON, которые я получаю из частного API, который у меня есть. Я использую библиотеку SwiftJSON.

Что бы я ни делал, я не могу присвоить переменной «videoUploadId» значение «video_upload_id», полученное из ответа JSON. Я надеюсь, что предоставил достаточно информации, чтобы получить некоторую помощь. Спасибо

Вот кусок кода

let task = session.dataTaskWithRequest(request, completionHandler: { (data : NSData!, response, error : NSError!) -> Void in
                if (error == nil) {
                    // Success
                    let statusCode = (response as NSHTTPURLResponse).statusCode
                    println("Status Code: \(statusCode)\r\n")

                    println("Response: \(response)\r\n")

                    println("Data: \(data)\r\n")

                    let dataContent = NSString(data: data!, encoding: NSUTF8StringEncoding)!

                    println("UTF8 Data: \(dataContent)\r\n")

                    let json = JSON(dataContent)

                    if let videoUploadId = json["video_upload_id"].int {

                        println("Video Upload ID (Dict: int): \(videoUploadId)")
                    }

                    else if let videoUploadId = json["video_upload_id"].string {

                        println("Video Upload ID (Dict: string): \(videoUploadId)")
                    }

                    else if let videoUploadId = json[0].int {

                        println("Video Upload ID (Array: int): \(videoUploadId)")
                    }

                    else if let videoUploadId = json[0].string {

                        println("Video Upload ID (Array: string): \(videoUploadId)")

                    }


                    else {
                        println(json["video_upload_id"].error)
                    }


                }
                else {
                    // Failure
                    println("URL Session Task Failed: %@", error.localizedDescription);
                }
            })
            task.resume()    

Вот что я получаю с моей консоли:

Ответ при входе: HTTP 200 Код состояния: 201

Ответ: { URL: https:////videos/uploads/} {код состояния: 201, заголовки { Connection = "Keep-alive"; «Длина контента» = 24; "Тип контента" = "приложение/json"; Дата = "Вс, 25 января 2015 г., 01:02:42 по Гринвичу"; Location = "https:////videos/uploads/"; Сервер = "Apache/2.2.15 (CentOS)"; "Set-Cookie" = "session=eyJzZXNzaW9uX3Rva2VuIjp7IiBiIjoiUzAxWGFYRnlVVGM1YjBsa1kxWkJiV2xrYVZwcFZXdDFiR0ZLYW5GQ1VqRjFjbk5GIn19.B6XSMg.HXatQ76ZFaoTTpQsnKANu1B; } }

Данные: ‹7b227669 64656f5f 75706c6f 61645f69 64223a20 3736307d>

Данные UTF8: {"video_upload_id": 760}

Необязательно (домен ошибки = код SwiftyJSONErrorDomain = 901 "Сбой словаря ["video_upload_id"], это не словарь" UserInfo = 0x170238620 {NSLocalizedDescription = словарь ["video_upload_id"] сбой, это не словарь})

Как вы можете видеть из кода и вывода консоли, я пытаюсь установить переменную несколькими различными способами, и все они, похоже, терпят неудачу. Я получаю сообщение об ошибке «Ошибка словаря ["video_upload_id"], это не словарь». Я даже пытался добавить «[» и добавить «]», чтобы проверить, не связана ли проблема с форматированием.

Любые подсказки?


person Dean D D    schedule 25.01.2015    source источник


Ответы (1)


Вы неправильно выполняете инициализацию. Вы должны использовать:

let json = JSON(data:data) // data is NSData!

Преобразование NSData в NSString не обязательно, и как-то неправильно для этого. SwiftyJSON можно инициализировать только с помощью объекта NSData или Swift.

person skyline75489    schedule 25.01.2015
comment
Cannot convert value of type 'JSON' to expected argument type 'Data' Я сталкиваюсь с этой проблемой при изменении кода выше - person Krunal Nagvadia; 25.11.2019
comment
Это ответ четыре года назад. С тех пор Swift значительно изменился. Я предлагаю игнорировать этот ответ сейчас. - person skyline75489; 25.11.2019