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

Swift 2.3解析JSON含HTML标签数据:如何保留格式移除标签?

解决Swift 2.3中JSON解析后字符串含HTML标签的问题

刚好我之前也碰到过一模一样的情况,给你两种靠谱的处理方案,既能干净移除HTML标签,又不会破坏原本的文本内容:

方案一:用NSAttributedString转换(推荐)

这个是系统原生的处理方式,能稳妥应对各种HTML格式(包括嵌套标签、带属性的标签),把HTML结构直接转换成纯文本。先写个工具函数:

func stripHTML(from string: String) -> String {
    guard let data = string.dataUsingEncoding(NSUTF8StringEncoding) else {
        // 字符串转Data失败时返回原内容
        return string
    }
    do {
        let attributedString = try NSAttributedString(
            data: data,
            options: [
                NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding
            ],
            documentAttributes: nil
        )
        return attributedString.string
    } catch {
        print("去除HTML标签出错:\(error)")
        return string
    }
}

然后修改你原来的代码,记得别用强制解包!,换成可选绑定更安全:

if let usernameRAW = json["username"] as? String {
    self.username = stripHTML(from: usernameRAW)
    print("Username: \(self.username)")
} else {
    // 处理JSON中没有username字段的情况
    self.username = ""
    print("JSON中未找到username字段")
}

方案二:正则表达式替换(适合简单场景)

如果你的HTML标签都是<p>、<div>这类无复杂属性的简单标签,也可以用正则直接替换掉所有标签内容:

func stripHTMLWithRegex(from string: String) -> String {
    return string.stringByReplacingOccurrencesOfString(
        "<[^>]+>",
        withString: "",
        options: .RegularExpressionSearch,
        range: nil
    )
}

用法和方案一一致,把stripHTML换成stripHTMLWithRegex即可。不过这个方法对复杂HTML(比如带样式的标签、嵌套标签)处理可能不够彻底,所以优先推荐方案一。

内容的提问来源于stack exchange,提问作者Denisse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:30