You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动