如果字符串中的一个值包含(“),则Swift Codable无法解码

时间:2018-07-09 12:35:11

标签: ios json swift codable

这是一个示例字符串,我正尝试通过JSONDecoder解码为相应的对象。

let errorString = """
{
    "ErrorCode":"5500",
    "ErrorMessage":"Not \"At all\" supported"
}
"""

对象:

struct FErrorResponse: Decodable {
    let errorCode: String
    let errorMessage: String

    enum CodingKeys: String, CodingKey {
        case errorCode = "ErrorCode"
        case errorMessage = "ErrorMessage"
    }
}

解码代码:

let json = errorString.data(using: String.Encoding.utf8)!
let decoder = JSONDecoder()

do {
    let errorRes = try decoder.decode(FErrorResponse.self, from: json)
    print("Code : \(String(describing: errorRes.errorCode)), Message : \(String(describing: errorRes.errorMessage))")
    if errorRes.errorCode == "5500" {
        print("Super error")
    }
} catch let error {
    print("Error >> \(error)")
}

显示的错误:

Error >> dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "Badly formed object around character 43." UserInfo={NSDebugDescription=Badly formed object around character 43.})))

如果我的输入字符串紧随其后,则可以正常工作,

let errorString = """
{
"ErrorCode":"5500",
"ErrorMessage":"Not supported"
}
"""

注意: 联机Json格式化程序工具可以正确解析输入字符串。如果我什至使用ObjectMapper的工具,它也会正确解析。仅当我使用Codable进行解码时,才会出现上述错误。

->这只是为了突出实际问题而编写的示例代码。从服务器接收到的字符串数据在响应中包含相似的值(其中包含“”的字符串已正确转义)。

请帮助。

1 个答案:

答案 0 :(得分:0)

您需要转义\

let str = """
    {
       "ErrorCode":"5500",
        "ErrorMessage":"Not \\"At all\\" supported"
    }
"""