我无法快速解码包含@符号的JSON响应[关闭]

问题描述 投票:0回答:1

我需要将我收到的一串电子邮件解码为 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 swift decoding
1个回答
0
投票

问题可能与 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 结构的编码键,它可能有助于解决解码电子邮件地址的问题。

© www.soinside.com 2019 - 2024. All rights reserved.