Быстрое извлечение JSON

Я разрабатываю быстрое приложение для iOS и получаю следующий ответ JSON от веб-службы. Я пытаюсь разобрать и получить nextResponse от него. Я не могу извлечь это. Может ли кто-нибудь помочь мне решить эту проблему?

listofstudents:
        ({
        studentsList =     (
                    {
                data =             (
                    "32872.23",
                    "38814.87",
                    "38915.85"
                );
                label = “name, parents and guardians”;
            }
        );
        dateList =     (
            "Apr 26, 2017",
            "Jun 10, 2017",
            "Jul 26, 2017"
        );
        firstResponse = “This school has 1432 students and 387 teachers.”;
        nextResponse = “This school has around 1400 students.”;
    })

Свифт код:

    do {
                let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
                print("json: \(json)")

                if let parseJSON = json {

                    let finalResponse = parseJSON["listofstudents"] as? AnyObject
                    print("listofstudents::   \(finalResponse)")

                    let nextResponse = parseJSON["nextResponse"] as? AnyObject
                    print("nextResponse::   \(nextResponse)")
         }
            } catch {
                print(error)
            }

3 ответа

Решение

nextResponse является частью структуры JSON (это вложенный узел). Таким образом, вы должны получить к нему доступ, используя:

typealias JSON = [String: Any]
if let finalResponse = parseJSON["listofstudents"] as? JSON {
    let nextResponse = finalResponse ["nextResponse"] as? JSON
    print("nextResponse::   \(nextResponse)")
}

Не использовать NSDictionary в Swift, но использовать его родной аналог Swift, Dictionary, Вот как вы получаете доступ к словарям, встроенным в другие словари:

do {
    guard let json = try JSONSerialization.jsonObject(with: data!) as? [String:Any] else {return}
    print("json: \(json)")

    guard let finalResponse = parseJSON["listofstudents"] as? [String:Any] else {return}
    print("listofstudents::   \(finalResponse)")

    guard let nextResponse = finalResponse["nextResponse"] as? [String:Any] else {return}
    print("nextResponse::   \(nextResponse)")
} catch {
    print(error)
}

Похоже, ваш listofstudents является массивом словаря, поэтому попробуйте повторить его и извлечь:

if let finalResponse = parseJSON["listofstudents"] as? [String: Any] {
 //If your finalResponse has list then you can print all the data
  for response in finalResponse {
    let nextResponse = finalResponse ["nextResponse"] as? AnyObject
    print("nextResponse::\(nextResponse)")
  }
}
Другие вопросы по тегам