使用 SwiftyJSON 获取 JSON 时发布数据

Posted

技术标签:

【中文标题】使用 SwiftyJSON 获取 JSON 时发布数据【英文标题】:POST data while when getting JSON with SwiftyJSON 【发布时间】:2016-09-04 09:44:53 【问题描述】:

我正在使用 Xcode 和 Swift 开发一个 ios 应用程序。

我正在使用SwiftyJSON.swift 和以下代码获取 JSON 数据:

import UIKit

class ViewController: UIViewController 

    var dict = NSDictionary()

    @IBOutlet weak var firstLb: UILabel!
    @IBOutlet weak var secondLb: UILabel!

    override func viewDidLoad() 

        super.viewDidLoad()

        let urlString = "http://example.com/showUserInfo.php"

        if let url = NSURL(string: urlString) 

            if let data = try? NSData(contentsOfURL: url, options: []) 

                let json = JSON(data: data)

                print(json)

                let f = json[0]["name"].stringValue

                let s = json[0]["age"].stringValue

                firstLb.text = f

                secondLb.text = s
            
        
    

这很好,但我希望能够发布到我的 PHP 脚本。 (我的 PHP 脚本已经准备好了。它可以接收 POST 数据并进行处理。)

我通常使用以下代码将数据 POST 到 PHP:

let request = NSMutableURLRequest(URL: NSURL(string: "http://example.com/showUserInfo.php")!)
request.HTTPMethod = "POST"
let postString = "username=MyUserName"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

这意味着:我知道如何使用 JSON 获取数据,并且我知道如何将值发布到 PHP。但不幸的是,我无法将两者结合起来。

有人知道如何组合它们吗?如何将值发布到获取 JSON 数据的 PHP 脚本?

【问题讨论】:

您可以发布您的 PHP 代码以获得更多帮助。 为什么? PHP 代码包含$username = $_POST['username'];。如何将我的 Swift 代码中的值发布到我的 PHP 脚本? 大卫,你错了。向我们展示您对如何发布数据的尝试。解释一下,什么不起作用,我们会帮助你。这不是一个可以“我有危险代码”的网站。 @vikingosegundo 我更新了我的问题。你能帮帮我吗? 使用NS(Mutable)URLRequest,您走在了正确的道路上,但不要使用postString。您最好使用let params = ["username":"MyUserName"], request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params options:0) 或类似的东西(它可能无法编译,我不会说 Swift),或者使用 SwiftyJSON(因为您使用它)等效方法将 Dictionary 转换为 JSON Data。 【参考方案1】:

要将数据发布到服务器,您应该使用内置 API,或者您可以使用一个非常著名的库:Alamofire

示例代码:

    let params:[String:AnyObject] = [
        "foo" : 1,
        "bar" : 2
    ]

    request(.POST,  "URL", parameters: params)
        .responseJSON  response in

            switch response.result 
            case .Success(let JSON):
                print("JSON: \(JSON)")

            case .Failure(let error):
                print("Request failed with error: \(error)")
            
    

【讨论】:

我更喜欢非库解决方案。你认识一个吗? @David Alamofire 几乎是行业标准......为什么要重新发明***? @Sajjon 我更喜欢自定义解决方案,我不想使用 CocoaPod。或者有没有办法在没有 CocoaPod 的情况下安装 Alamofire? 然后就可以使用NSURLSession了。但是,单个开发人员自己编写 HTTPClient 的可能性比整个开源社区编写的更好……这就是我强烈推荐 Alamofire 的原因。 是的,您可以在没有 cocoapods 的情况下安装 Alamofire,只需拖放 Alamofire 项目的“Source”文件夹即可。复制文件夹时不要忘记设置目标和复制项目。

以上是关于使用 SwiftyJSON 获取 JSON 时发布数据的主要内容,如果未能解决你的问题,请参考以下文章

将数据发布到 PHP 并使用 SwiftyJSON 获取 JSON

使用 Alamofire + SwiftyJSON 获取 JSON 数组

如何使用 SwiftyJSON 获取 json 数据的值

SwiftyJSON - 无法从 JSON 字符串获取 transactionId

如何使用 SwiftyJSON 从 JSON 对象中获取 JSON 密钥?

如何获取解析 json - SwiftyJSON