【问题标题】:convert Json data to user readable in swift快速将 Json 数据转换为用户可读
【发布时间】:2017-05-23 05:58:42
【问题描述】:

我从 PHP API 获得了这个 json 数据。但如何将其转换为在应用程序中显示。实际上,在添加圈子名称和 id 之前它工作正常,但是当这个 api 返回圈子名称并且它不起作用时。请帮忙。提前致谢。

JSON:["data": <__NSArrayM 0x60800025bed0>(
{
    Email = "ganesh@gmail.com";
    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)

【问题讨论】:

  • 我的代码有错误吗? @KrisRoofe
  • circleName = "&lt;null&gt;";。这意味着您的 circleName 是来自 json 的 nil
  • 如果 circleName = "Family" 那么解决方案是什么@RAJAMOHAN-S
  • 如果circleName = "Family" 你遇到了什么错误?

标签: php arrays json swift dictionary


【解决方案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 块中。

【讨论】:

  • 如果 CircleName = "Family" 那么解决方案是什么
  • @ArchanaSIngh 我已经为您提供了解决方案。您在两个不同的字典上循环,每个字典都有不同的结构,因此要解析它们,您需要两组逻辑。
  • 如果 let circleid = ((UserDic as AnyObject).object(forKey: "circleid") as?String),我没有得到我使用的结果!并且错误是“条件绑定的初始化程序必须具有可选类型,而不是'String'”
  • 因为@ArchanaSIngh 这行不是可选的((UserDic as AnyObject).object(forKey: "circleid") as? String)!。您可以使用此行(UserDic as? [String: AnyObject]).object(forKey: "circleid") as? String
  • 我应该在哪里写这行
猜你喜欢
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2015-04-04
  • 2015-02-14
  • 2020-01-13
  • 1970-01-01
  • 2019-05-03
相关资源
最近更新 更多