(未知上下文,价格为$ 10741e078)。CodingKeys>,Swift.DecodingError.Context(codingPath:[],debugDescription:“无法获取带密钥的解码容器-而是找到了空值。”,底层错误:无)
我的模型是,
struct Details : Decodable {
var userInfo : RequestUserInfo
var commercialInfo : String?
}
struct RequestUserInfo : Decodable {
var UserName : String?
var Email : String?
var UserIdentity : String?
var UserMobile : String?
var ThirdName : String?
var LastName : String?
var IdIssueDate : String?
var IdSourceCity : String?
}
(未知上下文,价格为$ 10741e078)。CodingKeys>,Swift.DecodingError.Context(codingPath:[],debugDescription:“无法获取带密钥的解码容器-而是找到了空值。”,底层错误:无)
答案 0 :(得分:2)
您需要在JSON中期望Optional (?)
的任何位置将类型标记为 null
。
但是,上述解析的问题与您在问题中描述的问题不同。
typeMismatch(Swift.String,Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue:“ newRequest”,intValue:nil), CodingKeys(stringValue:“ parcels”,intValue:nil), _JSONKey(stringValue:“ Index 0”,intValue:0),CodingKeys(stringValue:“ UsingPurposeId”,intValue:nil)],debugDescription:“预期 解码字符串,但找到一个数字。”,underlyingError:nil))
可以这样解决
UsingPurposeId
中BuildingRequestParcelDetails
的类型必须为Int?
而不是String?
按以下方式解析数据,
do {
let response = try JSONDecoder().decode(BuildingRequestDetails.self, from: data)
print(response)
} catch {
print(error)
}
答案 1 :(得分:0)
您可以使用此ModelAPI
-https://app.quicktype.io?share=NYC0PgFnypeo5cLho3sH
并使用代码self.requestDetail = try JSONDecoder().decode(ModelAPI.self, from: json)
进行调用。我已经检查了并且可以正常工作。另外,我还修复了您的JSON(两行错误)
答案 2 :(得分:0)
在您的情况下,如果 Details.userInfo == nil
设置
var userInfo : RequestUserInfo?
您的错误将消失。 但实际上,您的错误隐藏在错误的数据中。解码前先尝试添加字符串:
print(String(data: data, encoding: .ascii))
并仔细检查一切正常。 例如,您可能会获得“ user_info”而不是键“ userInfo”