Swiftを習得しようとしています。私のプロジェクトの1つは、内部Webサービス(Python CGIスクリプトのグループ)からJSONデータを取得し、それをSwiftオブジェクトに変換しようとすることです。私はこれをPythonで簡単に行うことができますが、私はSwiftでこれを行うのに問題があります。ここに私の遊び場コードは次のとおりです。SwiftでJSONをデータに変換する際に問題が発生しました
import UIKit
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
let endpoint: String = "http://pathToCgiScript/cgiScript.py"
let url = NSURL(string: endpoint)
let urlrequest = NSMutableURLRequest(URL: url!)
let headers: NSDictionary = ["User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",
"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"]
urlrequest.allHTTPHeaderFields = headers as? [String : String]
urlrequest.HTTPMethod = "POST"
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task = session.dataTaskWithRequest(urlrequest) {
(data, response, error) in
guard data != nil else {
print("Error: did not receive data")
return
}
guard error == nil else {
print("Error calling script!")
print(error)
return
}
do {
guard let received = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as?
[String: AnyObject] else {
print("Could not get JSON from stream")
return
}
print(received)
} catch {
print("error parsing response from POST")
}
}
task.resume()
私は、データを取得するために、「POST」を作ることは奇妙に見えるかもしれ知っているが、それはシステムの設定方法です。私が取得し続ける:
Could not get data from JSON
私は応答をチェックし、ステータスが、私は、その後でデータの説明を確認200です:私は、予期しない結果を得た
print(data?.description)
。ここにスニペットがあります:
Optional("<0d0a5b7b 22535441 54555322 3a202244 6f6e6522 2c202242 55535922...
私はミラーを使用しました。明らかにそのタイプはNSDataです。これをどうしたらいいか分からない。私はbase64EncodedDataWithOptionsでデータをエンコードしようとしました。私は別のNSJSONReadingOptionsも無駄にしようとしました。何か案は?
更新:
私がプレイグラウンドでコードをダブルチェックするためにWiresharkのを使用しました。電話が正しく行われただけでなく、返信されるデータも正しいです。実際、WiresharkはデータをJSONと見なしています。この問題は、JSONデータをSwiftオブジェクトに変換しようとしています。
JSONは問題の可能性がある 'CRLF'(0x0D0A)で始まります – vadian