我需要将我收到的一串电子邮件解码为 JSON。问题是“@”符号。 这是我的代码:
JSONManager 类 {
static func decode<T: Decodable>(_ data: Data, completion: @escaping ((T?) -> Void)) {
do {
let model = try JSONDecoder().decode(T.self, from: data)
completion(model)
} catch {
completion(nil)
print(String(describing: error))
}
}
}
这是一个 JSON:
"contacts": {
"email": "[email protected]",
"phone": "2312311212"
}
这是一个模型:
struct UserInfo: Codable {
let email, phone: String
}
我期望收到有效的解码值,但收到错误:
debugDescription:“没有与键 CodingKeys 关联的值(stringValue:“电子邮件”,intValue:nil)(“电子邮件”)。”,underlyingError:nil))
当我在 Codable 模型中评论电子邮件时,其余数据解码良好。 非常感谢大家帮忙!
问题可能与 JSON 中电子邮件地址的编码有关。电子邮件地址中的“@”符号在包含在 JSON 字符串中时需要正确转义。
以下是 JSON 的外观示例:
{
"contacts": {
"email": "test\\@source.com",
"phone": "2312311212"
}
}
确保“@”符号在 JSON 数据中转义为“@”。
如果您可以控制 JSON 数据,则应确保其格式正确。如果您从外部源接收此 JSON,您可能需要检查电子邮件地址的编码方式是否存在任何问题。
如果问题仍然存在,您还可以尝试修改 UserInfo 模型以显式使用 CodingKeys 枚举:
struct UserInfo: Codable {
let email, phone: String
private enum CodingKeys: String, CodingKey {
case email
case phone
}
}
这明确定义了 UserInfo 结构的编码键,它可能有助于解决解码电子邮件地址的问题。