6

私はswiftが初めてで、私が持っているプラ​​イベートAPIから取得しているいくつかの単純なJSONデータを解析しようとしています. SwiftJSON ライブラリを使用しています。

何をしても、変数「videoUploadId」に JSON 応答からの「video_upload_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"; Date = "Sun, 25 Jan 2015 01:02:42 GMT"; 場所 = "https:// / /videos/uploads/"; サーバー = "Apache/2.2.15 (CentOS)"; "Set-Cookie" = "session=eyJzZXNzaW9uX3Rva2VuIjp7IiBiIjoiUzAxWGFYRnlVVGM1YjBsa1kxWkJiV2xrYVZwcFZXdDFiR0ZLYW5GQ1VqRjFjbk5GIn19.B6XSMg.HXatQ76ZFaoZEQsnNu1Bgs;= Http/Only パス" } }

データ: <7b227669 64656f5f 75706c6f 61645f69 64223a20 3736307d>

UTF8 データ: {"video_upload_id": 760}

Optional(Error Domain=SwiftyJSONErrorDomain Code=901 "Dictionary["video_upload_id"] エラー、辞書ではありません" UserInfo=0x170238620 {NSLocalizedDescription=Dictionary["video_upload_id"] エラー、辞書ではありません})

コードとコンソール出力からわかるように、いくつかの異なる方法で変数を設定しようとしていますが、すべて失敗しているようです。「Dictionary["video_upload_id"] エラーが表示されます。これは辞書ではありません」というエラーが表示されます。フォーマットの問題かどうかを確認するために、先頭に「[」を追加して「]」を追加しようとしました。

手がかりはありますか?

4

1 に答える 1

11

初期化を間違っています。以下を使用する必要があります。

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

NSData を NSString に変換する必要はありません。これはどういうわけか間違っています。SwiftyJSON は、NSData または Swift オブジェクトでのみ初期化できます。

于 2015-01-25T02:23:17.577 に答える