我怎样才能将这个 swiftHTTP 函数的 json 属性作为字符串返回



我正在尝试学习如何将swiftHTTP与一个mishap api(https://www.mashape.com/textanalysis/textanalysis)一起使用。这是我到目前为止的代码,

import SwiftHTTP
    func splitSentenceIntoWordsUsingTextAnalysis (string: String) -> String {
    var request = HTTPTask()
    var params = ["text": "这是中文测试"] //: Dictionary<String,AnyObject>
    //request.requestSerializer = JSONRequestSerializer()
    request.requestSerializer.headers["X-Mashape-Key"] = "My-API-Key"
    request.requestSerializer.headers["Content-Type"] = "application/x-www-form-urlencoded"
    request.responseSerializer = JSONResponseSerializer()
    request.POST("https://textanalysis.p.mashape.com/segmenter", parameters: params, success: {(response: HTTPResponse) in if let json: AnyObject = response.responseObject { println("(json)") } },failure: {(error: NSError, response: HTTPResponse?) in println("(error)") })
// {
// result = "U4f60 U53eb U4ec0U4e48 U540dU5b57";
// }
return ?? // I want to return the "result" in the json as a string.
}

如何将 json 中的"结果"作为字符串返回?

SwiftHTTP和NSURLSession一样,在设计上是异步的。这意味着您不能只是从该方法返回。

import SwiftHTTP
func splitSentenceIntoWordsUsingTextAnalysis (string: String, finished:((String) -> Void)) {
    var request = HTTPTask()
    var params = ["text": "这是中文测试"] //: Dictionary<String,AnyObject>
    //request.requestSerializer = JSONRequestSerializer()
    request.requestSerializer.headers["X-Mashape-Key"] = "My-API-Key"
    request.requestSerializer.headers["Content-Type"] = "application/x-www-form-urlencoded"
    request.responseSerializer = JSONResponseSerializer()
    request.POST("https://textanalysis.p.mashape.com/segmenter", parameters: params, success: {
        (response: HTTPResponse) in
        if let res: AnyObject = response.responseObject {
            // decode res as string.
            let resString = res as String
            finished(resString)
        }
        }, failure: {(error: NSError, response: HTTPResponse?) in
            println(" error (error)")
    })
}

然后你会像这样使用它。

splitSentenceIntoWordsUsingTextAnalysis("textToSplit", {(str:String) in
    println(str)
    // do stuff with str here.
})

另请参阅此 Github 问题。

https://github.com/daltoniam/SwiftHTTP/issues/30

在此代码中,我发出了一个HTTP请求,并从示例php文件中获取JSON数据:

        // Making the HTTP request
        var post:NSString = "data=(data)"
        NSLog("PostData: %@",post)
        var url:NSURL = NSURL(string: "http://domain.com/jsontest.php")!
        var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!
        var postLength:NSString = String( postData.length )
        var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.HTTPBody = postData
        request.setValue(postLength, forHTTPHeaderField: "Content-Length")
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        request.setValue("application/json", forHTTPHeaderField: "Accept")

        var reponseError: NSError?
        var response: NSURLResponse?
        var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)
        if ( urlData != nil ) {
            let res = response as NSHTTPURLResponse!
            NSLog("Response code: %ld", res.statusCode)
            if (res.statusCode >= 200 && res.statusCode < 300)
            {
                var responseData:NSString  = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!
                NSLog("Response ==> %@", responseData)
                var error: NSError?

                // Here i make the JSON dictionary
                let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSDictionary
                // Like this you can access the values of the JSON dictionary as string
                name.text = jsonData.valueForKey("name") as NSString
                last.text = jsonData.valueForKey("last") as NSString
            }
        }

希望对:)有所帮助

相关内容

  • 没有找到相关文章

最新更新