天道酬勤,学无止境

Trouble parsing JSON with Swift using SwiftyJSON

I am new to swift and I am trying to parse some simple JSON data I am retrieving from a private API that I have. I am using the SwiftJSON library.

No matter what I do I cannot assign the variable "videoUploadId" with the value of "video_upload_id" coming from the JSON response. I hope i provided enough info to get some help. Thanks

Here is a segment of the code

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()    

This is what I am receiving from my console:

Login Response: HTTP 200 Status Code: 201

Response: { URL: https:////videos/uploads/ } { status code: 201, headers { Connection = "Keep-alive"; "Content-Length" = 24; "Content-Type" = "application/json"; Date = "Sun, 25 Jan 2015 01:02:42 GMT"; Location = "https:////videos/uploads/"; Server = "Apache/2.2.15 (CentOS)"; "Set-Cookie" = "session=eyJzZXNzaW9uX3Rva2VuIjp7IiBiIjoiUzAxWGFYRnlVVGM1YjBsa1kxWkJiV2xrYVZwcFZXdDFiR0ZLYW5GQ1VqRjFjbk5GIn19.B6XSMg.HXatQ76ZFaoZEQsnNu1BgsVECKA; HttpOnly; Path=/"; } }

Data: <7b227669 64656f5f 75706c6f 61645f69 64223a20 3736307d>

UTF8 Data: {"video_upload_id": 760}

Optional(Error Domain=SwiftyJSONErrorDomain Code=901 "Dictionary["video_upload_id"] failure, It is not an dictionary" UserInfo=0x170238620 {NSLocalizedDescription=Dictionary["video_upload_id"] failure, It is not an dictionary})

As you can see from the code and console output, I am attempting to set the variable in several different ways all of which seem to fail. I am receiving the error "Dictionary["video_upload_id"] failure, It is not an dictionary" I even tried prepending "[" and appending "]" to try to see if its a formatting issue.

Any clues?

评论

You are doing the initialization wrong. You should use:

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

Converting NSData to NSString is not necessary, and somehow wrong for this. SwiftyJSON can only be initialized with NSData or Swift object.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用 Swift / SwiftyJSON 解析 JSON(Parse JSON using Swift / SwiftyJSON)
    问题 我已经遵循了几个关于此的教程,据我所知,我正在做的应该是有效的。 我有以下来自 api 调用的 json 响应 { "Id": "1", "Name": "Test User", "Email": "test@email.com", "ProfileImage": null, "IsAdmin": true, "TakesJobs": false, "IsLocationUser": false, "IsCompanyAdmin": true, "LocationUsers": [], "CompanyUsers": [{ "CompanyName": "Test Company", "Id": 6, "CompanyId": 5, "UserId": "1", "Admin": true, "TakesJobs": false, "UserName": null, "UserEmail": null, "AssignedJobs": null }] } 基本上我只想检查 Id 值是否为空。 这是我正在使用的代码 res 返回类型是 JSON ApiConnector.sharedInstance.login(emailText.text!, password: passwordText.text!) { (res) in if let id = res["Id"] as
  • 如何将 json 数据从 alamofire 转换为 swift 对象(How to convert json data from alamofire to swift objects)
    问题 嗨,我正在使用 xcode 6.2 中的 swift 1.1 快速制作照片查看器应用程序我在尝试将 json 响应从 alamofire 转换为 swift 对象时遇到问题。我使用了 swiftyjson 库,但似乎存在兼容性问题。这是我的模型类 import Foundation struct Photo { var name: String var filename :String var notes: String } 这是我的 viewController import UIKit class ImageViewerTableViewController: UITableViewController { var photos = [Photo]() override func viewDidLoad() { super.viewDidLoad() Alamofire.request(.GET, "http://httpbin.org/get") .responseJSON { (_, _, JSON, _) in } } 在这种情况下,我如何将 json 映射到 swift 对象 谢谢 。 回答1 最好的解决方案是使用 AlamofireObjectMapper。 您的代码应如下所示: import Foundation import ObjectMapper
  • Alamofire、Swift 2.0、SwiftyJSON:将响应正文解析为 JSON(Alamofire, Swift 2.0, SwiftyJSON: Parse response body as JSON)
    问题 我已成功完成对服务器的 POST 请求,并且我正在尝试解析响应 JSON,但未成功。 Alamofire.request(.POST, ServerConfig.ADD_SELLER_URL, parameters: sellerJSON, encoding: .JSON, headers: nil) .responseJSON(completionHandler: { responseRequest, responseResponse, responseResult in print(responseRequest!.URL) print(responseResponse) print(responseResult) let json = JSON(responseResponse!) print(json) }) 我正在使用 SwiftyJSON 进行 JSON 解析。 这是我的输出 Optional(http://stage-sellers.strawmine.com/api/v1/sellers/addSeller) Optional(<NSHTTPURLResponse: 0x7f8f6df20530> { URL: http://stage-sellers.strawmine.com/api/v1/sellers/addSeller } { status code
  • 如何使用SwiftyJSON解析字符串数组?(how to parse string array with SwiftyJSON?)
    问题 使用SwiftyJSON ,我如何将以下JSON数组解析为Swift [String] ? { "array": ["one", "two", "three"] } 我已经尝试过此代码,但对我而言不起作用: for (index: String, obj: JSON) in json["array"] { println(obj.stringValue) } 处理此问题的最佳方法是什么? 谢谢你。 回答1 { "myArray": ["one", "two", "three"] } 使用SwiftyJSON,您可以通过以下方式获取JSON对象数组: var jsonArr:[JSON] = JSON["myArray"].arrayValue 函数式编程使您可以轻松地使用“地图”功能将其转换为[String]。 SwiftyJson让我们使用下标'.string'转换字符串类型 var stringArr:[String] = JSON["myArray"].arrayValue.map { $0.stringValue} 回答2 SwiftyJSON可让您提取String? 如果类型不匹配,则使用$ 0.string或使用stringValue的非可选String以及默认的空String值。 如果要确保具有非误报的String数组,请使用: var stringArray
  • Alamofire, Swift 2.0, SwiftyJSON: Parse response body as JSON
    I have successfully completed a POST request to server and I am trying to parse the response JSON but I have been unsuccessful. Alamofire.request(.POST, ServerConfig.ADD_SELLER_URL, parameters: sellerJSON, encoding: .JSON, headers: nil) .responseJSON(completionHandler: { responseRequest, responseResponse, responseResult in print(responseRequest!.URL) print(responseResponse) print(responseResult) let json = JSON(responseResponse!) print(json) }) I am using SwiftyJSON for JSON parsing. Here is my output Optional(http://stage-sellers.strawmine.com/api/v1/sellers/addSeller) Optional(
  • 将远程 JSON 数据同步到 iOS Swift 中的本地缓存存储(Synchronizing remote JSON data to local cache storage in iOS Swift)
    问题 我试图找到简单处理所有必要步骤的解决方案,以便在 iOS 设备上以只读方式使用远程 JSON 数据。 这意味着获取远程 JSON 数据,存储到 iOS 设备上的本地缓存以供离线使用,刷新缓存,解析 JSON 数据。 我认为这是当今所有移动应用程序非常普遍的要求。 我知道可以手动下载远程 JSON 文件,将其存储到本地数据库或 iOS 设备上的文件,当网络不可用时,从本地存储中获取它,否则从网络下载它。 我现在手动进行。 :) 但是希望通过使用框架/库可以完成很多步骤,不是吗? 所以我尝试了 HanekeSwift 框架,它几乎可以做我需要的所有事情,但它只缓存远程 JSON(和图像)但不刷新缓存!! 这对我没有用。 我也知道存在 Alamofire 和 SwiftyJSON,但我对它们没有任何经验。 你有没有经验如何做到这一点? 概括 Swift 中支持 iOS8 的库或框架下载远程 JSON 并存储到本地缓存从它的来源刷新本地缓存的可能性不错的奖励是简单的 JSON 解析 回答1 好问题! 您绝对可以结合使用Alamofire和SwiftyJSON来完成此任务。 我建议将几件事结合起来,以使其尽可能简单。 我认为您有两种获取JSON的方法。 在内存中获取JSON数据并使用缓存策略将JSON数据直接下载到磁盘上到本地缓存 选项1 // Create a shared URL
  • SwiftyJson 是否能够将自定义 swift 类转换为 json 字符串?(Is SwiftyJson capable of converting a custom swift class to a json string?)
    问题 下面给出的是我的自定义 swift 类。 我的问题是如何使用 SwiftyJson 将此类的对象转换为 json 字符串? class Equipment{ var UniqueItemId:String? = "" var ItemNo:String? = "" var EquipmentType:String? = "" var EquipmentDescription:String? = "" var Length:String? = "" var Wll:String? = "" var EquipmentLocation:String? = "" var EquipmentManufacture:String? = "" var SerialNo:String? = "" var Condition:String? = "" var Remarks:String? = "" var InspectionDate:String? = "" var Inspector:String? = "" } 例如,像这样: var jsonString = JSON(equipmentObject); 回答1 更新 OP 现在对 EVReflection 感到满意。 所以我认为此时它是最好的选择。 原答案 由于 Swift 反射的可能性还不是很丰富,所以现在没有像 google
  • 如何对来自 Alamofire 的 JSON 进行排序并返回最终的 JSON 对象 (swiftyJSON)(How to sort JSON coming from Alamofire and return final JSON object (swiftyJSON))
    问题 我无法简洁地从 api 中提取数据,将用户当前位置添加到对象中,然后根据计算出的距离对数据进行排序。 stackoverflow 问题并不能完全回答我面临的问题。 请参阅此处:如何对从 Swift 中的 JSON 服务器文件读取的帖子进行排序。 我目前正在从 Alamofire 加载 api 数据并使用 UITableViewController 呈现该数据。 override func viewDidLoad() { super.viewDidLoad() titleLabel.title = q.capitalizedString Alamofire.request(.GET, "http://www.thesite.com/api/v1/things", parameters: ["q" : q]) .responseJSON { response in let JSONObject = JSON(response.result.value!) self.results = JSONObject["things"] for (key, _) in self.results { let intKey: Int = Int(key)! var thisItem: JSON = self.results[intKey] let geoLat = thisItem["place
  • 如何使用 SwiftyJSON 在 Json 中解析 Json?(How Can I Parse Json In Json With SwiftyJSON?)
    问题 我从 API 返回以下 JSON。 在我的数据库中,我已经在 J​​SON 中存储了一个列表。 因此,它在 JSON 中为我们提供了一个 JSON 字符串。 如何在 Swift 中将这些作为对象访问? 更重要的是:如何在 JSON 中解析 JSON? { "checklists": [ { "id": 1, "account_id": 15, "user_id": 15, "object_id": 21, "checklist": "[{\"title\":\"Test\",\"summary\":\"Test 12\"},{\"title\":\"Test 2 \",\"summary\":\"Test 123\"}]", "title": "High Altitude Operations", "type": "other", "LastHistory": null, "CleanArray": [ { "title": "Test", "summary": "Test 12" }, { "title": "Test 2 ", "summary": "Test 123" } ] } ] } 回答1 首先,解码主要对象。 假设data是您问题中的 JSON: let json = JSON(data: data)
  • SwiftyJSON 循环遍历 JSON 对象数组(SwiftyJSON looping through an array of JSON objects)
    问题 [ { "cont": 9714494770, "id": "1", "name": "Kakkad" }, { "cont": 9714494770, "id": "2", "name": "Ashish" } ] 上面的一个是一个用 JSON 对象填充的 json 数组。 我不知道如何用 SwiftyJSON 解析这个 回答1 SwiftyJSON 页面中的示例,适用于您的数据: let json = JSON(data: dataFromNetworking) for (index, object) in json { let name = object["name"].stringValue println(name) } 回答2 假设[{"id":"1", "name":"Kakkad", "cont":"9714494770"},{"id":"2", "name":"Ashish", "cont":"9714494770"}]分配给名为 jsonData 的属性。 let sampleJSON = JSON(data: jsonData) let sampleArray = sampleJSON.array sampleArray 是 JSON 对象的可选数组。 let firstDict = sampleArray[0] firstDict 是一个可选的
  • 如何使用SwiftyJSON遍历JSON?(How to loop through JSON with SwiftyJSON?)
    问题 我有一个可以用SwiftyJSON解析的json: if let title = json["items"][2]["title"].string { println("title : \(title)") } 完美的作品。 但是我无法遍历它。 我尝试了两种方法,第一种是 // TUTO : //If json is .Dictionary for (key: String, subJson: JSON) in json { ... } // WHAT I DID : for (key: "title", subJson: json["items"]) in json { ... } XCode不接受for循环声明。 第二种方法: // TUTO : if let appArray = json["feed"]["entry"].arrayValue { ... } // WHAT I DID : if let tab = json["items"].arrayValue { ... } XCode不接受if语句。 我究竟做错了什么 ? 回答1 如果要遍历json["items"]数组,请尝试: for (key, subJson) in json["items"] { if let title = subJson["title"].string { println
  • 无法将 NSNumber 桥接到 Float Swift 3.3(Unable to bridge NSNumber to Float Swift 3.3)
    问题 在 Xcode 更新后,我遇到了一个奇怪的问题。 在我的应用程序中,当我从 API 获得响应时,我会手动解析它并将其映射到我的模型。 在我的代码中有很多地方,我将一个 JSON 值转换为Float并使用 null 合并,如下所示: randomVariable = jsonDict["jsonKey"] as? Float ?? 0 它曾经工作正常,但更新后,它总是默认为 0。为了确定原因,我尝试强制将其强制转换为Float如下所示 randomVariable = jsonDict["jsonKey"] as! Float 这导致了以下错误 无法将 NSNumber 桥接到 Float 经过进一步调查,我发现 Xcode 使用的是 Swift 3.3(之前它使用的是 Swift 3.2)。 我在 StackOverflow 上找到的解决方案围绕将其转换为NSNumber而不是Float 。 正如我上面提到的,我的应用程序中有类似的代码行。 我想知道是否有办法解决这个问题。 也许使用某种扩展? 回答1 正如您所发现的,您可能需要先将其转换为NSNumber 。 像这样的东西: randomVariable = (jsonDict["jsonKey"] as? NSNumber)?.floatValue ?? 0 也许正则表达式替换会帮助您更新代码。 模式: jsonDict\
  • 如何使用 swiftyJSON dictionaryValue 作为 UILabel 的可用字符串?(How can I use swiftyJSON dictionaryValue as a usable string for a UILabel?)
    问题 我在 UITableViewController 中有一个makeRequest()方法,代码如下: func makeRequest() { Alamofire.request(.GET, self.foursquareEndpointURL, parameters: [ //"VENUE_ID" : self.foursquareVenueID, "client_id" : self.foursquareClientID, "client_secret" : self.foursquareClientSecret, "v" : "20140806" ]) .responseJSON(options: nil) { (_, _, data, error) -> Void in if error != nil { println(error?.localizedDescription) } else if let data: AnyObject = data { let jObj = JSON(data) if let venue = jObj["response"]["venue"].dictionaryValue as [String: JSON]? { self.responseitems = jObj println("venue is: \(venue)") }
  • 使用 SwiftyJSON 解析具有相似元素的 JSON(Parse JSON with similar elements using SwiftyJSON)
    问题 我有这种类型的 JSON(只是一个简短的示例): "orderProducts": [ { "id": 135, "order_id": 39, "product_id": 49, "product_code": "", "size_id": 13, "quantity": 2, "product": { "id": 49, "code": "", "factory_id": 2, "product_category_id": 1, "sex_id": null, "season_id": null, "product_type_id": null, "type_id": null, "color_id": null, "year_id": null, "image_1": "bceef8b28ae2a1797ca0c6300021100d.jpeg", "image_2": "", "image_3": "", "notes": "", "status": 10 } }, { "id": 136, "order_id": 39, "product_id": 49, "product_code": "", "size_id": 14, "quantity": 3, "product": { "id": 49, "code": "", "factory_id": 2,
  • How Can I Parse Json In Json With SwiftyJSON?
    I am returning the following JSON from an API. In my database, I store a list in JSON already. Thus, it gives us a string of JSON inside JSON. How can I access these as objects in Swift? More to the point: How can I parse JSON inside of JSON? { "checklists": [ { "id": 1, "account_id": 15, "user_id": 15, "object_id": 21, "checklist": "[{\"title\":\"Test\",\"summary\":\"Test 12\"},{\"title\":\"Test 2 \",\"summary\":\"Test 123\"}]", "title": "High Altitude Operations", "type": "other", "LastHistory": null, "CleanArray": [ { "title": "Test", "summary": "Test 12" }, { "title": "Test 2 ", "summary"
  • how to parse string array with SwiftyJSON?
    Using SwiftyJSON how would I parse the following JSON array into a Swift [String]? { "array": ["one", "two", "three"] } I have tried this code, but it doesn't work for me: for (index: String, obj: JSON) in json["array"] { println(obj.stringValue) } What would be the best way to handle this? Thank you.
  • 在 Swift3 中使用 SwiftyJSON(Using SwiftyJSON with Swift3)
    问题 如何在 Swift3 中使用 SwiftyJSON? 我已经安装了吊舱。 pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git', :branch => 'swift3' 但是使用 Xcode 8 GM 会引发很多错误。 有人可以帮我正确安装它吗? 回答1 SwiftyJSON 现在支持 Swift 3。 pod 'SwiftyJSON', '3.0.0' 回答2 更新:正如 Marcus 所说,SwiftyJSON 现在支持 Swift 3。为了修复错误,我建议不要将自己固定到 3.0.0,而是: pod 'SwiftyJSON', '>= 3.0.0' ……或者,如果您不想意外地发现 4.x 中可能出现的任何 API 破坏性更改: pod 'SwiftyJSON', '~> 3.0' [旧答案]有一个有效维护的叉子: pod 'SwiftyJSON', git: 'https://github.com/BaiduHiDeviOS/SwiftyJSON.git', branch: 'swift3' 希望项目维护者合并它。 在此之前,您可以只使用叉子。 回答3 请试试这个。 我有好几天了。 这为我解决了这个问题。 pod 'SwiftyJSON', '3.1.4'
  • 如何在没有任何第三方库的情况下在 Swift 3.0 中使用 Alamofire 解析 JSON(How to parse JSON using Alamofire in Swift 3.0 without any third-party library)
    问题 这里我想通过 url 解析 JSON。 这是 url 上可用的实际 JSON 数据。 所以我需要解析它并使用 Alamofire 在我的应用程序中读取。 但我做不到。 我的网址中的 JSON 数据。 { "main": [ { "date": "2017-01-11", "USDARS": "15.8302", "USDCLP": "670.400024", "USDSDG": "6.407695" }, { "date": "2017-01-12", "USDARS": "15.804999", "USDCLP": "661.599976", "USDSDG": "6.407697" }, { "date": "2017-01-13", "USDARS": "15.839041", "USDCLP": "659.200012", "USDSDG": "6.407704" }, { "date": "2017-01-14", "USDARS": "15.839041", "USDCLP": "659.200012", "USDSDG": "6.407704" } ] } 我如何在 swift 3.0 中使用 Alamofire 阅读它 下面是我实际上试图通过 url 解析上面的 JSON 数据的内容。 Alamofire.request("myurl")
  • 如何在 swift iOS 中制作用于跟踪 JSON 响应的模型类(How to make model class for following JSON response in swift iOS)
    问题 嗨,我是 swift ios 的初学者,我的要求是必须显示对表列表的 Json 响应,我从网络服务得到响应,响应如下所示 我的要求是如何将该模型类映射到 Array 以及如何在 tableList 中显示它们,请有人帮助我 Json响应:- [{ "_id" : "5470def9e0c0be27780121d7", "imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/api-static\/clubs\/5470def9e0c0be27780121d7_180.png", "name" : "Mondo", "hasVip" : false, "location" : { "city" : "Madrid" } }, { "_id" : "540b2ff281b30f3504a1c72f", "imageUrl" : "https:\/\/s3-eu-west-1.amazonaws.com\/api-static\/clubs\/540b2ff281b30f3504a1c72f_180.png", "name" : "Teatro Kapital", "hasVippler" : false, "location" : { "address" : "Atocha, 125", "city" : "Madrid" } }
  • How to sort JSON coming from Alamofire and return final JSON object (swiftyJSON)
    I'm having trouble succinctly pulling data from an api, adding the users current location into the object and then sorting the data based on the calculated distance. The stackoverflow questions don't quite answer the problem I'm facing. See here: How to sort posts read from JSON server file in Swift. I'm currently loading api data from Alamofire and rendering that data with a UITableViewController. override func viewDidLoad() { super.viewDidLoad() titleLabel.title = q.capitalizedString Alamofire.request(.GET, "http://www.thesite.com/api/v1/things", parameters: ["q" : q]) .responseJSON {