You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:58:25