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
相关产品推荐
相关产品推荐

