我尝试从接受以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周围的值无效。}
答案 0 :(得分:2)
您可能没有有效的JSON - 正如错误所述,就在第一个字符周围。有效JSON将是一个使用{
和}
或对象数组打开和关闭的对象,使用[
和]
打开和关闭。
请发布一些返回的JSON进行确认。
编辑:此外 - 如果您要请求http
资源而不是https
,则需要将服务器添加到允许的不安全服务器列表中。