json - 使用带参数的 POST 请求获取 JSON 结果

标签 json swift http-post nsurlsession nsurlrequest

如何使用带有参数的 POST 请求来获取 JSON?我知道如何通过简单的 GET 请求来做到这一点。请求url为http://gyminyapp.azurewebsites.net/api/Gym参数查询为

{
  "SearchCircle": {
    "Center": {
      "Latitude": 0,
      "Longitude": 0
    },
    "Radius": 0
  },
  "City": "string",
  "ZipCode": 0,
  "Type": "string"
}

我只想使用其中的搜索圈部分,这意味着我可以忽略城市和邮政编码字段。我需要提供从当前用户位置获取的纬度/经度。我还需要将类型设置为“半径”。

对于使用 GET 版本的简单 GET 请求,我这样做。

let url = NSURL(string: "http://gyminyapp.azurewebsites.net/api/Gym")
        let data = NSData(contentsOfURL: url!)
        do {
            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
            for gym in json as! [AnyObject] {
                gyms.append(gym)
            }
        } catch {
            print("Error")
        }

最佳答案

这是一个有效的代码,您只需输入请求参数的值即可。

let session = NSURLSession.sharedSession()
    let url = "http://gyminyapp.azurewebsites.net/api/Gym"
    let request = NSMutableURLRequest(URL: NSURL(string: url)!)
    request.HTTPMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    let params:[String: AnyObject] = ["Type" : "string","SearchCircle" : ["Radius" : 0, "Center" : ["Latitude" : 0, "Longitude" : 0]]]
    do{
        request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions())
        let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
            if let response = response {
                let nsHTTPResponse = response as! NSHTTPURLResponse
                let statusCode = nsHTTPResponse.statusCode
                print ("status code = \(statusCode)")
            }
            if let error = error {
                print ("\(error)")
            }
            if let data = data {
                do{
                let jsonResponse = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())
                print ("data = \(jsonResponse)")
                }catch _ {
                    print ("OOps not good JSON formatted response")
                }
            }
        })
        task.resume()
    }catch _ {
        print ("Oops something happened buddy")
    }

然后在 if let data = data 中,您需要解析响应。我检查了响应,它是 JSON 格式的数组。

关于json - 使用带参数的 POST 请求获取 JSON 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37526096/

相关文章:

Javascript-Applet通信: how to pass return values back to Javascript

swift - 如何缩放半径以适应所有设备?

objective-c - 在 Swift 中使用 CommonCrypto 进行解密

java - Android HTTP POST 参数发送但服务器未收到

javascript - AngularJS $http.post/service 问题

c - 用 C 处理 microhttp 服务器中的 POST 数据

javascript - Json语法有什么问题

javascript - JSON 文件中包含键值对的数组索引

javascript - 检查Ajax json响应数据是否正确

swift - 如何在 sprite 套件中进行缓慢的颜色过渡?