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

Swift解析后端含转义字符JSON失败问题求助

解决嵌套JSON字符串的解析问题

嘿,我来帮你搞定这个问题!你说得没错,问题确实出在data字段的内容上——后端返回的data是一个已经被序列化过的JSON字符串,也就是JSON里嵌套了另一个JSON,所以直接解析外层JSON的话,data只会被当成普通字符串处理,而不是你想要的字典结构。

不用慌,我们只需要做两次JSON解析就能解决:先解析外层JSON拿到data的字符串值,再把这个字符串单独解析成JSON对象。

下面是修改后的Playground代码,我加了注释说明每一步:

import Foundation

var jsonStr = """
{ "status": "success", "data": "{\"name\":\"asd\",\"address\":\"Street 1st\"}" }
"""

// 第一步:解析外层JSON
if let data = jsonStr.data(using: .utf8) {
    do {
        // 解析外层后,得到一个包含status和data的字典
        guard let outerDict = try JSONSerialization.jsonObject(with: data) as? [String: Any] else {
            print("外层JSON格式错误")
            return
        }
        
        // 取出data字段的字符串值
        guard let dataStr = outerDict["data"] as? String else {
            print("data字段不是字符串类型")
            return
        }
        
        // 第二步:把data字符串转换成Data,再解析成内层JSON
        if let innerData = dataStr.data(using: .utf8) {
            let innerDict = try JSONSerialization.jsonObject(with: innerData)
            print("解析后的内层数据:", innerDict)
            // 这里你就可以正常使用innerDict里的name、address字段了
        } else {
            print("内层字符串转Data失败")
        }
        
    } catch let e {
        print("解析错误:", e)
    }
} else {
    print("DATA conversion ERROR")
}

运行这段代码后,你就能得到data里的字典结构,正常访问name和address字段啦。

简单总结下:后端把内层的JSON对象先转成了字符串,再放到外层JSON里,所以我们需要反向操作两次——先拆外层,再解析内层的字符串成JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:51