ios - swiftyJson 在嵌套的 json 中返回 null

标签 ios swift xcode swift3 swifty-json

我正在使用此函数将发布值发送到服务器:

func getFirstPageApplication(EMPTY:String,completionHandler: @escaping (_ response: String) -> ())
{
    var strResponse = "null"
    var request = URLRequest(url: URL(string: self.baseURL+"getFirstPageApplication")!)
    request.httpMethod = "POST"
    let postString = "EMAIL=\(EMPTY)"
    request.httpBody = postString.data(using: .utf8)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data, error == nil else {                                                 // check for fundamental networking error
            print("error=\(error)")
            return
        }

        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(response)")
        }

        let responseString = String(data: data, encoding: .utf8)
        strResponse =  responseString!
        completionHandler(strResponse)
    }
    task.resume()


}

在我的其他 Controller 中,我使用此函数来使用上述方法:

func initialFirstView()
{
    RestApiManager.sharedInstance.getFirstPageApplication(EMPTY:"-"){
        response in

        let json = JSON(response)

        print("res: \(json["sliders"])")

    }
}

我得到了响应值,但 json["sliders"] 返回 null,我不知道!

我的回复值:

{"sliders":[{"id":4,"title":"\u0647\u0645\u06cc\u0634\u0647 \u0628\u0647 \u0622\u0648\u0627\u0632 \u0628\u0627 \u0627\u0633\u062a\u0627\u062f\u06a9\u062a","image":"1500801181_ostadcat_slider_1.jpg","status":1,"created_at":"2017-07-23 04:43:01","updated_at":"2017-07-23 04:43:01"},{"id":6,"title":"\u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0647\u0645\u0647, \u0647\u0645\u0647 \u0628\u0631\u0627\u06cc \u06cc\u06a9\u06cc","image":"1500801699_ostadcat_slider_3.jpg","status":1,"created_at":"2017-07-23 04:51:39","updated_at":"2017-07-23 04:51:39"},{"id":7,"title":"\u062d\u0631\u0641\u0647 \u0627\u06cc \u062a\u0631\u06cc\u0646 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u0648\u0633\u06cc\u0642\u06cc","image":"1500801728_ostadcat_slider_4.jpg","status":1,"created_at":"2017-07-23 04:52:08","updated_at":"2017-07-23 04:52:08"},{"id":8,"title":"\u062a\u0648 \u0647\u0645 \u0645\u06cc \u062a\u0648\u0646\u06cc \u0645\u062b\u0644 \u0645\u0646 \u0628\u0627\u0634\u06cc!!!","image":"1500801751_ostadcat_slider_2.jpg","status":1,"created_at":"2017-07-23 04:52:31","updated_at":"2017-07-23 04:52:31"}],"tutorials":[{"id":1,"home_image":"1500806287_img_home_test_6.png","tutorial_image":"1500809220_Hot-Romanian-Inna-in-black-goggles-wallpapers.jpg","tutorial_title":"\u062e\u0648\u0627\u0646\u0646\u062f\u06af\u06cc","tutorial_description":"\u0622\u0645\u0648\u0632\u0634 \u062c\u0627\u0645\u0639 \u062e\u0648\u0627\u0646\u0646\u062f\u06af\u06cc","video":"1500810916_innaHot2.mp4","video_title":"\u062e\u0648\u0627\u0646\u0646\u062f\u06af\u06cc \u0631\u0627 \u062d\u0631\u0641\u0647 \u0627\u06cc \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u062f","teacher_image":"1500808975_inna-dark-hair-white-dresses-digital-art.jpg","teacher_name":"\u0627\u06cc\u0646\u0627","teacher_bio":"\u0628\u0647\u062a\u0631\u06cc\u0646 \u0627\u0632 \u0633\u0627\u0644 2009 \u062a\u0627 \u0628\u0647 \u0627\u0644\u0627\u0646","status":1,"created_at":"2017-06-29 17:31:20","updated_at":"2017-07-23 11:55:16"},{"id":2,"home_image":"1500802877_img_home_test_1.jpg","tutorial_image":"1500802877_Image.png","tutorial_title":"\u0622\u0645\u0648\u0632\u0634 \u06af\u06cc\u062a\u0627\u0631 \u0627\u0633\u0644\u0634","tutorial_description":"\u06af\u06cc\u062a\u0627\u0631 \u0627\u0633\u0644\u0634 \u0631\u0627 \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u062f!!!","video":"1500804433_oneRepublic.mp4","video_title":"\u0646\u0645\u0648\u0646\u0647 \u0622\u0645\u0648\u0632\u0634 \u06af\u06cc\u062a\u0627\u0631","teacher_image":"1500802882_maxresdefault.jpg","teacher_name":"\u0648\u0627\u0646 \u0631\u06cc\u067e\u0627\u0628\u0644\u06cc\u06a9","teacher_bio":"\u06af\u0631\u0648\u0647 \u0648\u0627\u0646 \u0631\u06cc\u067e\u0627\u0628\u0644\u06cc\u06a9 \u0634\u0627\u0645\u0644 5 \u0639\u0636\u0648","status":1,"created_at":"2017-06-29 17:35:09","updated_at":"2017-07-23 05:37:13"}]}

@Reinier Melian 已解决:

 func getFirstPageApplication(EMPTY:String,completionHandler: @escaping (_ response: AnyObject) -> ())
    {
        var strResponse = "null"
        var request = URLRequest(url: URL(string: self.baseURL+"getFirstPageApplication")!)
        request.httpMethod = "POST"
        let postString = "EMAIL=\(EMPTY)"
        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            if error != nil {
                DispatchQueue.main.async {
                    completionHandler({} as AnyObject)
                }

            } else {
                if let usableData = data {
                    do {

                        let jsonResult = try JSONSerialization.jsonObject(with: usableData, options:
                            JSONSerialization.ReadingOptions.mutableContainers)
                        //print("worked")
                        //print(jsonResult) //this part works fine
                        DispatchQueue.main.async {
                            completionHandler(jsonResult as AnyObject)
                        }

                    } catch {
                        DispatchQueue.main.async {
                            completionHandler({} as AnyObject)
                        }
                        print("JSON Processing Failed")
                    }
                }
            }
        }
        task.resume()

    }

最佳答案

尝试在完成处理程序中使用 AnyObject 而不是 String 并添加 JSONSerialization 以序列化为 json

func getFirstPageApplication(EMPTY:String,completionHandler: @escaping (_ response: AnyObject) -> ())
{
    var strResponse = "null"
    var request = URLRequest(url: URL(string: self.baseURL+"getFirstPageApplication")!)
    request.httpMethod = "GET"
    let postString = "EMAIL=\(EMPTY)"
    request.httpBody = postString.data(using: .utf8)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data, error == nil else {                                                 // check for fundamental networking error
            print("error=\(error)")
            return
        }

        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(response)")
        }

        do {
            let json:AnyObject? = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
            if let parseJSON = json{
                print(parseJSON)
            }
            completionHandler(parseJSON)
        }

    }
    task.resume()

}

那么你一定可以毫无问题地使用它

func initialFirstView()
{
    RestApiManager.sharedInstance.getFirstPageApplication(EMPTY:"-"){
        response in
        print("res: \(response["sliders"])")
    }
}

此代码未经测试,如果有效请告诉我

希望对你有帮助

关于ios - swiftyJson 在嵌套的 json 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514852/

相关文章:

ios - 将指针位置和长度转换为数组

ios - 使用 SecItemCopyMatching 和 Veracode 进行错误处理

ios - 状态栏颜色与 Pixate

iphone - 奇怪的图标行为

iphone - 无法在Xcode iPhone模拟器上播放声音

ios - 通过引用访问实例变量安全吗?

ios - 如何获取用户的时区?

ios - UIDatePicker 在较小的屏幕尺寸上呈现不正确

ios - 当新的 View Controller 被激活时,变量数据被删除

iphone - 是否可以在 Objective-C 中重定向系统 API?