在Swift中忽略JSON POST请求中的参数?

时间:2015-10-02 09:47:48

标签: json swift

我正在尝试从URL获取一些数据,这需要我发布一个JSON请求。它的工作原理是我得到了一些数据;只是没有我预期的数据。然后我用jsontest.com来测试我的代码:

let url = NSURL(string: "http://echo.jsontest.com/")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"

do {
    let params = ["echo": "abc"] as Dictionary<String, String>

    //... Just make sure that 'params' is a valid JSON object
    assert(NSJSONSerialization.isValidJSONObject(params))

    request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.PrettyPrinted)
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")

} catch {
    print("Error")
}

let session = NSURLSession.sharedSession()
dataTask = session.dataTaskWithRequest(request, completionHandler: {
    (data: NSData?, response: NSURLResponse?, error: NSError?) in

    if let httpResponse = response as? NSHTTPURLResponse where httpResponse.statusCode == 200,
        let data = data {

            let encodedData = NSString(data:data, encoding:NSUTF8StringEncoding)
            print("encodedData = \(encodedData!)")

    } else {
        print("Error")
    }
})

dataTask?.resume()

当我运行它时,我看到jsontest.com的以下输出:

encodedData = {"": ""}

我期待的地方

encodedData = {"echo": "abc"}

那么,我是否不能正确理解这是jsontest.com是如何工作的,还是我做错了什么? (显然,我在使用其他JSON服务时遇到了类似的问题。)任何评论都表示赞赏。

3 个答案:

答案 0 :(得分:1)

echo.jsontest.com不适用于请求正文,但有请求网址,请参阅www.jsontest.com/#echo了解详情。

答案 1 :(得分:0)

结果@Eric D是对的。我发现另一个网站来测试我的JSON帖子,那个工作正常。所以代码基本上都是正确的。 我做了以下更改:

let url = NSURL(string: "http://gurujsonrpc.appspot.com/guru")
let params = [ "method" : "guru.test", "params" : [ "GB" ], "id" : 123 ] as Dictionary<String, AnyObject>

然后我得到以下回复:

{"jsonrpc":"2.0","id":123,"result":"Hello GB!"}

这正是预期的结果。 谢谢!

答案 2 :(得分:0)

正确的网址是http://validate.jsontest.com

另外,我认为您没有正确构建POST请求正文。见How are parameters sent in an HTTP POST request?