Я получил данные 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)
У вас есть набор словарей, и каждый словарь имеет разную структуру при разборе.
Почему я говорю это?
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.