如何在 IOS 上使用 Swift 解析 JSON,从 PHP 服务脚本发送?

Posted

技术标签:

【中文标题】如何在 IOS 上使用 Swift 解析 JSON,从 PHP 服务脚本发送?【英文标题】:How to Parse a JSON with Swift on IOS, sent from a PHP service script? 【发布时间】:2015-12-06 04:03:34 【问题描述】:

我在使用 swift 在 ios 上解析从 php 脚本发送的 JSON 时遇到问题。我这周刚开始学习 IOS 开发,之前也从未使用过 JSON,因此在正确解析此内容方面的任何帮助将不胜感激。我将 mysql 查询的结果作为 JSON 发送到应用程序。这是我的 swift 代码和错误日志,您可以在其中看到 http 服务接收到的对象。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    let secondViewController:VC2 = segue.destinationViewController as! VC2

    let myUrl = NSURL(string: "myscriptaddress");

            let request = NSMutableURLRequest(URL:myUrl!);

            request.HTTPMethod = "POST";

            let postString = "condition=" + String(currentval);

            request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);

            secondViewController.mystring = "getting ready"

            let task = NSURLSession.sharedSession().dataTaskWithRequest(request) 
                data, response, error in
                guard data != nil else 
                    print("no data found: \(error)")
                    return
                

                do 
                    if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary 

                        print("Success")

                     else 
                        let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
                        print("Error could not parse JSON: \(jsonStr)")

                    
                 catch let parseError 
                    print(parseError)
                    let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
                    print("Error can't parse JSON: '\(jsonStr)'")

                
            

            task.resume()

现在是错误日志:

Error could not parse JSON: Optional(["unidad":"sanfrancisco","capacidad":"15","uso":"5","telefono":"num","unidad":"pediatricouniversitario","capacidad":"15","uso":"5","telefono":"num","unidad":"sanjorge","capacidad":"15","uso":"7","telefono":"num","unidad":"himacaguas","capacidad":"20","uso":"4","telefono":"num","unidad":"himabayamon","capacidad":"20","uso":"8","telefono":"num","unidad":"sanlucas","capacidad":"10","uso":"8","telefono":"num","unidad":"auxiliomutuo","capacidad":"15","uso":"11","telefono":"num"])

【问题讨论】:

【参考方案1】:

它无法将 JSON 数据解包为字典类型。提供的 JSON 字符串是一个对象数组。

在你的 JSONObjectWithData 调用中试试这个:

let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [[String : AnyObject]]

【讨论】:

以上是关于如何在 IOS 上使用 Swift 解析 JSON,从 PHP 服务脚本发送?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift:使用 AFNetworking 解析响应 json

swift 1.2 中的 JSON 解析问题

如何以正确的方式在 IOS SWIFT 3 中解析 Google 距离矩阵 API JSON

如何在 Swift 5 中使用 Alamofire 解析 json

IOS/Swift/JSON:使用 swiftyJSON 解析嵌套的 JSON

iOS - 在 Swift 中使用 NSJSONSerialization 解析 JSON 字典