无法在swift中下载过大的json数据

时间:2017-10-06 17:11:28

标签: ios json swift

我尝试从接受以json格式输入的用户名和密码的网络服务器将数据下载到JSON。一旦我通过身份验证,我就必须下载json数据。所以我使用了这种方法

let postString = ["user":"user1", "pwd": "pass1"]
        var request = URLRequest(url:URL(string:"http://vdctest.agrishare.com/list_up")!)
        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")
        request.addValue("application-idValue", forHTTPHeaderField: "secret-key")
        request.httpBody = try! JSONSerialization.data(withJSONObject: postString, options:.prettyPrinted)
        let session = URLSession.shared
        //Post
        session.dataTask(with: request){data, response, err in
            //Guard: ws there error ?
            guard(err == nil) else {
                print("err")
                return
            }
            //Guard: check was any data returned?
            guard let data = data else{
                print("no data return")
                return
            }
            //Convert Json to Object
            let parseResult: [String:AnyObject]!
            do{
                parseResult = try JSONSerialization.jsonObject(with: data, options:.allowFragments) as! [String:AnyObject]
                print("\(parseResult)")
            } catch {
                print("Could not parse data as Json \(data)")
                return
            }
            //Check jsonDictionary
            guard let jsonArray = parseResult["success"] as? [String:AnyObject] else{
                print("jsonDictionary error")
                return
            }
            //check jsonArray and switch to LoginViewController
            if(jsonArray.count == 0 ){
                print("jsonArray not found")
                return
            } else{
                DispatchQueue.main.async{
                    let loginvc = LoginViewController()
                    self.present(loginvc, animated: true, completion: nil)
                    print(jsonArray)

                }
            }

            }.resume()

    }

当我运行应用程序时,终端会说:

  

无法将数据解析为Json 1520字节

为什么?

输出:

  

无法将数据解析为Json:Error Domain = NSCocoaErrorDomain   代码= 3840"字符0周围的值无效。"   UserInfo = {NSDebugDescription =字符0周围的值无效。}

1 个答案:

答案 0 :(得分:2)

您可能没有有效的JSON - 正如错误所述,就在第一个字符周围。有效JSON将是一个使用{}或对象数组打开和关闭的对象,使用[]打开和关闭。

请发布一些返回的JSON进行确认。

编辑:此外 - 如果您要请求http资源而不是https,则需要将服务器添加到允许的不安全服务器列表中。