Json 错误:键入';任何';没有带Swift 4的阿拉莫菲尔下标成员
我尝试过许多解决方案,但都没有成功。我试图传递json数据并返回用户值 型号:Json 错误:键入';任何';没有带Swift 4的阿拉莫菲尔下标成员,json,swift,alamofire,Json,Swift,Alamofire,我尝试过许多解决方案,但都没有成功。我试图传递json数据并返回用户值 型号: import Foundation class UserModel: NSObject { var UserID: String! var Name: String! init(UserID: String, Name: String) { super.init() self.UserID = UserID self.Name = Name } } guard let ur
import Foundation
class UserModel: NSObject {
var UserID: String!
var Name: String!
init(UserID: String, Name: String) {
super.init()
self.UserID = UserID
self.Name = Name
}
}
guard let url = URL(string: "https://api.com/api.php?PatientList") else { return }
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Accept")
request.httpMethod = "POST"
let pinPost = "&Token=\(token)"
request.httpBody = pinPost.data(using: .utf8)
Alamofire.request(request).responseJSON { (response) in
if let dict = response.result.value as? Dictionary<String, AnyObject> {
if let datas = dict["Data"] as? NSArray {
for data in datas {
let users = UserModel(UserID: data["PatientID"], Name: data["DisplayName"])
}
}
}
}
提取功能:
import Foundation
class UserModel: NSObject {
var UserID: String!
var Name: String!
init(UserID: String, Name: String) {
super.init()
self.UserID = UserID
self.Name = Name
}
}
guard let url = URL(string: "https://api.com/api.php?PatientList") else { return }
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Accept")
request.httpMethod = "POST"
let pinPost = "&Token=\(token)"
request.httpBody = pinPost.data(using: .utf8)
Alamofire.request(request).responseJSON { (response) in
if let dict = response.result.value as? Dictionary<String, AnyObject> {
if let datas = dict["Data"] as? NSArray {
for data in datas {
let users = UserModel(UserID: data["PatientID"], Name: data["DisplayName"])
}
}
}
}
你需要
if let datas = dict["Data"] as? [[String:Any]] {
而不是
if let datas = dict["Data"] as? NSArray {
由于数组元素的类型为Any
,无法在此处订阅data[“PatientID”]
和data[“DisplayName”]
Alamofire.request("request").responseJSON { (response) in
if let dict = response.result.value as? [String:Any] {
if let datas = dict["Data"] as? [[String:Any]] {
for data in datas {
if let id = data["PatientID"] as? Int , let name = data["DisplayName"] as? String {
let users = UserModel(UserID:id, Name: name)
}
}
}
}
}
也可以考虑使用<代码> CODEPEN/CONDE>解析响应
struct Root: Codable {
let data: [UserModel]
enum CodingKeys: String, CodingKey {
case data = "Data"
}
}
struct UserModel: Codable {
let patientID: Int
let displayName: String
enum CodingKeys: String, CodingKey {
case patientID = "PatientID"
case displayName = "DisplayName"
}
}
Alamofire.request("request").responseData{ (response) in
if let data = response.data {
do {
let res = try JSONDecoder().decode(Root.self, from: data)
print(res.data)
}
catch {
print(error)
}
}
}
正确的答案是 {“数据”:[{“显示名称”:“杰瑞·史密斯”,“德·伯德”:“1987年8月9日”}]
当我尝试使用
Codable
解决方案:dataCorrupted(Swift.DecodingError.Context(codingPath:[],debugDescription:“给定的数据不是有效的JSON.”,underyingerror:Optional(error Domain=nscocaerordomain code=3840“No value.”UserInfo={NSDebugDescription=No value.})时,我遇到了这个错误
那么你的json无效我已经添加了我的json的照片,请你看一下。将其作为字符串发布,因为我会让你知道正确的编辑,而且没有PatientID密钥,所以请用DOB替换它