Arhn - архитектура программирования

Цикл через ответ JSON от Alamofire

Я использую xcode 7.2 и быстрый 2.1.1. использование Alamofire для связи с сервером. У меня есть табличное представление, отображающее динамические данные. Данные включают в себя имя пользователя, адрес пользователя, profilePicture и т. д. Я пытался реализовать этот код из stackoverflow. Но я получаю предупреждающее сообщение о том, что Приведение из «JSON» к несвязанному типу «[Словарь]» всегда терпит неудачу Мой ответ json:

{
  "JsonRequestBehavior" : 1,
  "MaxJsonLength" : null,
  "ContentType" : null,
  "Data" : {
    "_id" : "5658444778a7531f4c79c23d",
    "Photo" : "",
    "AllowSharing" : "YES",
    "MemberCount" : 5,
    "Users" : [
      {
        "_id" : "5658443478a7531f4c79c23c",
        "Photo" : "",
        "MembershipDate" : "0001-01-01T00:00:00",
        "MiddleName" : null,
        "FirstName" : "Gohan",
        "LastName" : null,
        "Email" : "[email protected]"
      },
      {
        "_id" : "566ea5f1dfead62350cf0fad",
        "Photo" : "",
        "MembershipDate" : "0001-01-01T00:00:00",
        "MiddleName" : null,
        "FirstName" : null,
        "LastName" : null,
        "Email" : "[email protected]"
      }
    ],
    "MembershipDate" : "2015-12-14T12:03:12.819Z",
    "CreatedBy" : "5658443478a7531f4c79c23c"
  },
  "ContentEncoding" : null,
  "RecursionLimit" : null
}

Как я могу перебирать Пользователи в ответе JSON?

EDIT в соответствии с ответом JohnyKutty. Я попробовал тот же код в своем проекте. Код для того же

 Alamofire.request(.GET,App.AppHomeURL() + "Load_Group", parameters: ["groupid":"\(groupId)"]).responseJSON
            {
                response in
                 print("\(response.data)")
                switch response.result
                {

                case .Success(let _data):
                    let jsonData = JSON(_data)
                    print("Admin Response : \(jsonData)")

                do
                   {
                    let json = try NSJSONSerialization.JSONObjectWithData(_data as! NSData, options: .AllowFragments) as! NSDictionary
                        if let DataObject = json["Data"] as? NSDictionary
                        {
                            if let users = DataObject["Users"] as? [NSDictionary]
                            {
                                for user in users
                                {
                                    print("User id : \(user["_id"])")
                                }
                            }
                        }

                   }

                    catch let error as NSError
                    {
                        print(error.localizedDescription)
                    }

в этой строке let json = try NSJSONSerialization.JSONObjectWithData(_data as! NSData, options: .AllowFragments) as! NSDictionary Сначала я использовал «_data», а затем Xcode предложил изменение, и оно изменилось с _data на _data as! НСДата.

22.12.2015

  • Вы можете использовать SwiftyJSON. 22.12.2015
  • Разбирайте данные JSON в пользовательские объекты, тогда любая операция с ними (например, итерация) будет легкой. 08.03.2016

Ответы:


1

Структура вашего сына похожа на JSON (словарь) -> данные (словарь) -> пользователи (массив словарей). Итак, сначала вы должны выбрать массив Users из необработанного json, а затем выполнить итерацию по нему.

Поскольку alamofire уже сериализует ваш ответ, нет необходимости снова использовать JSONSerializer, я обновляю свой ответ.

ОБНОВЛЕНИЕ Попробуйте этот код внутри корпуса

if let DataObject = _data["Data"] as? NSDictionary {
    if let Users = DataObject["Users"] as? [NSDictionary] {
        for user in Users {
            print(user["_id"],user["MembershipDate"],user["FirstName"],user["Email"], separator: "   ", terminator: "\n")
        }
    }
}

Полный код:

Alamofire.request(.GET,App.AppHomeURL() + "Load_Group", parameters: ["groupid":"\(groupId)"]) .responseJSON { response in
        switch response.result {

        case .Success(let _data):
            print(_data)
            if let DataObject = _data["Data"] as? NSDictionary {
                if let Users = DataObject["Users"] as? [NSDictionary] {
                    for user in Users {
                        print(user["_id"],user["MembershipDate"],user["FirstName"],user["Email"], separator: "   ", terminator: "\n")
                    }
                }
            }

        default:
            break;
        }


}
22.12.2015
  • Я попробовал ваш код, но получил ошибку. let json = попробуйте NSJSONSerialization.JSONObjectWithData(_data as! NSData, параметры: .AllowFragments) as! NSDictionary 22.12.2015
  • Это ошибка... Could not cast value of type '__NSCFDictionary' (0x109373ef0) to 'NSData' (0x109372e88). 22.12.2015
  • Что вы пробовали? Можете ли вы обновить свой вопрос своим кодом? 22.12.2015
  • кажется, что _data уже преобразован в JSON, поэтому вы можете использовать, например, «if let DataObject = _data[Data] as? NSDictionary'..... 22.12.2015
  • Да, я уже изменил код так, как вы обновили. это работает ... !!! 24.12.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..