如何去除Apple Pay支付JSON字符串中的转义反斜杠?
解决Apple Pay JSON字符串去转义反斜杠问题
方法一:正确替换转义反斜杠
你之前用replacingOccurrences失败,大概率是没处理Swift字符串的转义规则——原字符串里的单个转义反斜杠,在Swift代码中会被表示为\\,所以替换时要匹配的是"\\"而非"\"。示例代码:
// 带转义反斜杠的原始JSON字符串 let escapedJSON = "{\"transactionId\":\"AP12345\",\"amount\":199.00}" // 去除所有转义反斜杠 let cleanedJSON = escapedJSON.replacingOccurrences(of: "\\", with: "") // 输出结果:{"transactionId":"AP12345","amount":199.00}
方法二:从字典/模型重新生成无冗余JSON
如果是从字典或模型转换时出现多余字符,问题通常出在JSON生成的格式选项上(比如误加了.prettyPrinted导致换行空格)。以下是两种可靠的生成方式:
方式1:用JSONSerialization生成(兼容全iOS版本)
// 假设你已有解析好的Apple Pay数据字典 let paymentDict: [String: Any] = [ "transactionId": "AP12345", "amount": 199.00, "currency": "USD" ] do { // 用默认选项生成无转义、无格式冗余的JSON Data let jsonData = try JSONSerialization.data(withJSONObject: paymentDict, options: []) // 转换为字符串 if let cleanedJSON = String(data: jsonData, encoding: .utf8) { // 此时cleanedJSON就是无多余字符的干净字符串,可直接用于MD5哈希 } } catch { print("JSON生成失败:\(error)") }
方式2:用JSONEncoder生成(iOS 13+/macOS 10.15+)
如果用Codable模型,注意不要设置.prettyPrinted,可选添加.sortedKeys保证键顺序固定(哈希计算要求字符串完全一致,键顺序会影响结果):
// 定义Apple Pay数据模型 struct ApplePayment: Codable { let transactionId: String let amount: Double let currency: String } let payment = ApplePayment(transactionId: "AP12345", amount: 199.00, currency: "USD") let encoder = JSONEncoder() // 可选:固定键顺序,避免不同环境下生成的JSON键顺序不一致 encoder.outputFormatting = .sortedKeys do { let jsonData = try encoder.encode(payment) if let cleanedJSON = String(data: jsonData, encoding: .utf8) { // 得到干净的JSON字符串 } } catch { print("模型编码失败:\(error)") }
关键注意点
- 哈希计算对字符串的一致性要求极高,若从模型/字典生成JSON,务必保证键顺序固定(比如用
.sortedKeys),否则不同生成顺序会导致哈希值不同。 - 不要使用
.prettyPrinted选项,它会生成换行、空格等冗余字符,干扰哈希计算。
内容的提问来源于stack exchange,提问作者Evg Enii
相关产品推荐
相关产品推荐

