Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SwiftyJSON使用Swift解析JSON时遇到问题_Json_Swift_Swifty Json - Fatal编程技术网

使用SwiftyJSON使用Swift解析JSON时遇到问题

使用SwiftyJSON使用Swift解析JSON时遇到问题,json,swift,swifty-json,Json,Swift,Swifty Json,我是swift新手,我正在尝试解析一些简单的JSON数据,这些数据是从我拥有的私有API中检索的。我正在使用SwiftJSON库 无论我做什么,我都不能给变量“videoUploadId”分配来自JSON响应的“video\u upload\u id”值。我希望我提供了足够的信息来获得帮助。谢谢 下面是一段代码 let task = session.dataTaskWithRequest(request, completionHandler: { (data : NSData!, respons

我是swift新手,我正在尝试解析一些简单的JSON数据,这些数据是从我拥有的私有API中检索的。我正在使用SwiftJSON库

无论我做什么,我都不能给变量“videoUploadId”分配来自JSON响应的“video\u upload\u id”值。我希望我提供了足够的信息来获得帮助。谢谢

下面是一段代码

let task = session.dataTaskWithRequest(request, completionHandler: { (data : NSData!, response, error : NSError!) -> Void in
                if (error == nil) {
                    // Success
                    let statusCode = (response as NSHTTPURLResponse).statusCode
                    println("Status Code: \(statusCode)\r\n")

                    println("Response: \(response)\r\n")

                    println("Data: \(data)\r\n")

                    let dataContent = NSString(data: data!, encoding: NSUTF8StringEncoding)!

                    println("UTF8 Data: \(dataContent)\r\n")

                    let json = JSON(dataContent)

                    if let videoUploadId = json["video_upload_id"].int {

                        println("Video Upload ID (Dict: int): \(videoUploadId)")
                    }

                    else if let videoUploadId = json["video_upload_id"].string {

                        println("Video Upload ID (Dict: string): \(videoUploadId)")
                    }

                    else if let videoUploadId = json[0].int {

                        println("Video Upload ID (Array: int): \(videoUploadId)")
                    }

                    else if let videoUploadId = json[0].string {

                        println("Video Upload ID (Array: string): \(videoUploadId)")

                    }


                    else {
                        println(json["video_upload_id"].error)
                    }


                }
                else {
                    // Failure
                    println("URL Session Task Failed: %@", error.localizedDescription);
                }
            })
            task.resume()    
这是我从控制台收到的信息:

登录响应:HTTP 200 身份代码:201

响应:{URL:https:////videos/uploads/ }{状态代码:201,标题{ 连接=“保持活动”; “内容长度”=24; “内容类型”=“应用程序/json”; 日期=“太阳,2015年1月25日01:02:42 GMT”; 位置=”https:////videos/uploads/"; Server=“Apache/2.2.15(CentOS)”; “设置Cookie”=“session=eyjzzxnzaw9ux3rva2vuijp7iibijoiuzaxwgfyrnlvlvgm1yjbsa1kxwkjiv2xryvzwcfzxddfir0zlyw5gq1vqrjfjbk5glin.B6XSMg.HXatQ76ZFaoZEQsnNu1BgsVECKA;HttpOnly;Path=/”; }}

数据:

UTF8数据:{“视频上传id”:760}

可选(错误域=SwiftyJSONErrorDomain Code=901“Dictionary[“video\u upload\u id”]失败,它不是字典”UserInfo=0x170238620{NSLocalizedDescription=Dictionary[“video\u upload\u id”]失败,它不是字典})

正如您从代码和控制台输出中看到的,我试图以几种不同的方式设置变量,但所有这些方式似乎都失败了。我收到错误“Dictionary[“video_upload_id”]失败,它不是字典”我甚至尝试在“[”前面加上“]”以查看是否是格式问题


有什么线索吗?

您的初始化错误。你应使用:

let json = JSON(data:data) // data is NSData!

将NSData转换为NSString是不必要的,而且在某种程度上是错误的。SwiftyJSON只能用NSData或Swift对象初始化

无法将“JSON”类型的值转换为预期的参数类型“Data”
四年前,当用上述方法更改代码时,我面临这个问题。此后,斯威夫特发生了重大变化。我建议现在忽略这个答案。