【问题标题】:Trouble parsing JSON with Swift using SwiftyJSON使用 SwiftyJSON 使用 Swift 解析 JSON 时遇到问题
【发布时间】:2015-03-23 19:21:30
【问题描述】:

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

无论我做什么,我都无法将来自 JSON 响应的“video_upload_id”值分配给变量“videoUploadId”。我希望我提供了足够的信息来获得帮助。谢谢

这是一段代码

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/"; 服务器 = "Apache/2.2.15 (CentOS)"; "Set-Cookie" = "session=eyJzZZXNzaW9uX3Rva2VuIjp7IiBiIjoiUzAxWGFYRnlVVGM1YjBsa1kxWkJiV2xrYVZwcFZXdDFiR0ZLYW5GQ1VqRjFjbk5GIn19.B6XSMg.HXatQ76ZFaoZEQsnNu1BgOnly;"; } }

数据:

UTF8 数据:{"video_upload_id": 760}

可选(错误域=SwiftyJSONErrorDomain Code=901 "Dictionary["video_upload_id"] 失败,它不是字典" UserInfo=0x170238620 {NSLocalizedDescription=Dictionary["video_upload_id"] 失败,它不是字典})

正如您从代码和控制台输出中看到的那样,我试图以几种不同的方式设置变量,但似乎都失败了。我收到错误“Dictionary["video_upload_id"] failure, It is not an dictionary" 我什至尝试在前面加上“[”并附加“]”来查看它是否是格式问题。

有什么线索吗?

【问题讨论】:

    标签: json swift swifty-json


    【解决方案1】:

    你做错了初始化。你应该使用:

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

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

    【讨论】:

    • Cannot convert value of type 'JSON' to expected argument type 'Data' 我在上面更改代码时遇到了这个问题
    • 这是四年前的回答。从那时起,Swift 发生了巨大的变化。我建议现在忽略这个答案。
    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多