Swift 3解析JSON异常,如何获取标准JSON格式对象?
解决方案:获取标准JSON字符串输出
你遇到的问题其实是打印格式的误解:你用JSONSerialization解析出来的对象本身是正确的Swift字典/数组结构,但直接打印这些对象时,Xcode会输出调试用的描述格式(类似Objective-C时代NSDictionary的显示样式),这并不是说解析结果有问题。
如果想要得到步骤2里那种标准的格式化JSON字符串,你需要把解析后的对象重新序列化为JSON数据,再转换为字符串。以下是Swift 3的实现代码:
do { // 1. 解析原始JSON数据为Swift对象(字典/数组) let jsonObject = try JSONSerialization.jsonObject(with: data, options: []) // 2. 将对象重新序列化为格式化的JSON数据 // 使用.prettyPrinted选项生成带缩进、换行的标准格式 let formattedJSONData = try JSONSerialization.data(withJSONObject: jsonObject, options: .prettyPrinted) // 3. 将JSON数据转换为字符串并输出 if let formattedJSONString = String(data: formattedJSONData, encoding: .utf8) { print(formattedJSONString) } } catch { print("JSON处理出错:\(error.localizedDescription)") }
补充说明:
- 如果你只是需要访问JSON里的具体字段(比如
freelancer的值),直接用之前的字典访问方式就完全没问题:if let object = json1 as? [String: Any], let applicationState = object["applicationStateJson"] as? [String: Any], let freelancerStatus = applicationState["freelancer"] as? String { print("Freelancer status: \(freelancerStatus)") // 会输出 "Y" } .prettyPrinted选项是可选的,如果不需要格式化(想要紧凑的JSON字符串),可以换成[],但它能让输出和你步骤2里的标准格式完全匹配。
内容的提问来源于stack exchange,提问作者Bhavani Ayyamperumal




