【问题标题】:Fetch data from JSON in swift 3在 swift 3 中从 JSON 中获取数据
【发布时间】:2018-06-15 01:55:54
【问题描述】:

我是 iOS 新手,我的任务是从 JSON 中获取数据。我有一个 JSON,我可以从中获取一些数据,但有些没有。请帮助我。

在此我使用了代码:

              NetworkManager.post("http://dev.depolitie.be/dev/public/api/cameras/get_cameras_list", parameters: parameters as [String : AnyObject], success: {(result: NSDictionary) -> Void in
        print ("Api Success 22  : result is:\n \(result)")

        if let error = result.value(forKey: "error") {
            print(error)
        }else {

            let userDict = result.value(forKey: "data") as! NSDictionary
           self.cameraArray = userDict["data"] as! NSArray


            let introText = userDict["introtext"] as? Int

            print("introtext",introText)


             //let firstName = employee["firstName"]! as Strin
            //  let introtext = userDataAsArray["introtext"]! as Int
           // print("introText", introtext)


        }

        self.cameraTableView.reloadData()

    }, failure: {(error: NSDictionary?) -> Void in
        print ("Api Failure : error is:\n \(String(describing: error))")

    })

我通过将其初始化为数组获得的内部数据,但我无法从 JSON 中获取“introtext”字段。

【问题讨论】:

  • 快速查看您的 JSON 显示“introtext”是一个文本(顾名思义),但在您的代码中,您试图将其解码为一个 Int。这行不通……
  • 我认为您的 introtext 在根字典中,在这种情况下您还需要转换为正确的字符串类型
  • 请提供您从何处获取此确切 JSON,以便我们可以正确检查它。现在,它是一个图像文件(我们需要来自您获取它的同一位置的确切文本),并且它看起来包含错误。
  • 我尝试将其作为字符串获取,但出现错误。 @莫里茨
  • @AndroidDeveloper 看看 Reinier Melian 的评论,我认为他是对的。该字段不在 userDict 中。

标签: ios json iphone swift swift3


【解决方案1】:

试试这个代码..?

NetworkManager.post("http://dev.depolitie.be/dev/public/api/cameras/get_cameras_list", parameters: parameters as [String : AnyObject], success: {(result: NSDictionary) -> Void in
    print ("Api Success 22  : result is:\n \(result)")

    if let error = result.value(forKey: "error") {
        print(error)
    }else {

    let userDict = result.value(forKey: "data") as! NSDictionary        
    let dataArray = userDict["data"] as! NSArray
    let firstElementOfDataArray = dataArray.object(at: 0) as! NSDictionary

    let adminId = firstElementOfDataArray["admin_id"] as! String
    let createdAt = firstElementOfDataArray["created_at"] as! String
    let description = firstElementOfDataArray["description"] as! String







    }

    self.cameraTableView.reloadData()

}, failure: {(error: NSDictionary?) -> Void in
    print ("Api Failure : error is:\n \(String(describing: error))")

})

【讨论】:

    【解决方案2】:

    正如我在评论中所说,您的 introtext 在根字典中,在这种情况下,您还需要转换为正确的类型 String

    试试这个代码

    if let error = result.value(forKey: "error") {
                print(error)
            }else {
    
               if let userDict = result["data"] as? [String:AnyObject]{
                  if let cameraArrayValues = userDict["data"] as? [[String:AnyObject]]{
                       self.cameraArray = cameraArrayValues
                   }
               }
    
               if let introText = result["introtext"] as? String{
                   print("Introtext:" + introText)
               }
    
            }
    

    【讨论】:

    • 请不要养成valueForKeyNSArray / NSDictionary这样的坏习惯。建议适当的 Swift 语法。
    • 对不起,我只是复制并粘贴 OP 问题中的代码块,并更改相关部分,但我现在会解决这个问题,谢谢@vadian
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多