преобразовать данные Json в удобочитаемое пользователем в Swift

-2

Я получил данные json из PHP API. но как его конвертировать в приложение. На самом деле он отлично работает, прежде чем добавлять имя и идентификатор круга, но когда этот api возвращает имя круга, и он не работает. Пожалуйста помоги. Заранее спасибо.

JSON:["data": <__NSArrayM 0x60800025bed0>(
{
    Email = "[email protected]";
    ID = 104;
    Name = archana;
    Phone = "( 91)9111111110";
    status = 1;
    timeinterval = 15;
    userpic = "";
},
{
    circleName = "<null>";
    circleid = 155;
}
)
]

ниже мой код.

 let configuration = URLSessionConfiguration.default
                let session = URLSession(configuration: configuration)

                let dataTask = session.dataTask(with: request, completionHandler: { (data, response, error) -> Void in
                    do
                    {
                        let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String:Any]
                        print("JSON:\(json)")
                        if let data = json["data"] as? [[String:String]]
                        {
                            self.stopIndicator()
                            print("DATA:\(data)")
                            if let errorString = data.first?["Error"]
                            {
                                print("Error: \(errorString)")
                                if (errorString == "Invalid Email or Password")
                                {
                                    // Perform Operation in Main thread
                                    OperationQueue.main.addOperation
                                        {
                                            let alertController = UIAlertController(title: "Invalid Email or Password", message: "Your Email or password is Invalid. Please Enter Correct Email or Pasword.", preferredStyle: UIAlertControllerStyle.alert)
                                            alertController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: {(_action) -> Void in
                                                _ = self.navigationController?.popViewController(animated: false)

                                            }))
                                            self.present(alertController, animated: true, completion: nil)
                                        }
                                }
                            }

                            else if let UserArray = (json as AnyObject).object(forKey: "data") as? NSArray
                            {
                                 for UserDic in UserArray
                                 {
                                var Email:String
                                var ID:String
                                var Name:String
                                var Phone:String
                                var status:String
                                var timeinterval:String
                                var userpic:String

                                Email = ((UserDic as AnyObject).object(forKey: "Email") as? String)!
                                ID = ((UserDic as AnyObject).object(forKey: "ID") as? String)!
                                Name = ((UserDic as AnyObject).object(forKey: "Name") as? String)!
                                Phone = ((UserDic as AnyObject).object(forKey: "Phone") as? String)! 
                                status = ((UserDic as AnyObject).object(forKey: "status") as? String)!
                                timeinterval = ((UserDic as AnyObject).object(forKey: "timeinterval") as? String)!
                                userpic = ((UserDic as AnyObject).object(forKey: "userpic") as? String)!

                                let userModel = UserDetailsArray(UserEmail: Email, UserId: ID, UserName: Name, UserPhone: Phone, UserStatus: status, TimeInterVal: timeinterval, UserPic: userpic)
  • 0
    swift3 parse json
  • 0
    есть ли ошибка в моем коде? @KrisRoofe
Показать ещё 3 комментария
Теги:
arrays
dictionary

1 ответ

1
Лучший ответ

У вас есть набор словарей, и каждый словарь имеет разную структуру при разборе.

Почему я говорю это?

   json = [dictionaryOne, dictionaryTwo...]
   dictionaryOne = ["Email": "" , "ID": ....]
   dictionaryTwo = ["cicileName": nil, "circleid": ""....]

Теперь, когда вы разбираете массив,

   for UserDic in UserArray {
       // here initialising the variables
   }

Вы не следите за тем, чтобы появился словарь второй структуры, и почему вы получаете ошибку.

Простое решение было бы иметь проверку, т.е.

  for UserDic in UserArray {
      if let circleName = (UserDic as AnyObject).object(forKey: "circleid") as? String {
          // do not parse if you don't need the data of this dict and continue
          continue;
      } else {
         // parse the other dictionary which has Email, ID etc
         var Email: String
         var ID:String
         .
         .
         .
      }
  }

Если вы хотите сохранить оба словаря, тогда определите похожие переменные и сохраните их внутри блока if.

  • 0
    если CircleName = "Family", то каково решение
  • 0
    @ArchanaSIngh Я предоставил вам решение. Вы зацикливаетесь на двух разных словарях, и у каждого своя структура, поэтому для их анализа вам понадобятся два набора логики.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню