Swift中如何获取无Unicode转义序列的JSON响应
解决Swift请求JSON返回Unicode转义序列的问题
你看到的JSON中的Unicode转义序列仅为调试打印时的默认表现,实际存储在Data中的字符串本身是正常的可显示文本,只需修改解析和读取逻辑即可得到正常内容。
常见解决方案
方案1:使用Swift官方推荐的Codable协议解析(优先选择)
这种方式类型安全,解析后直接读取对应字段即可得到正常字符串,代码示例:
首先定义对应数据结构:
// 定义和JSON结构匹配的模型 struct ResponseResult: Codable { let id: Int let writeDate: String let name: String let xPhone: String // 其余需要的字段按需补充即可 enum CodingKeys: String, CodingKey { case id case writeDate = "write_date" case name case xPhone = "x_phone" // 其余字段的映射同理补充 } } struct RootResponse: Codable { let result: ResponseResult }
修改请求回调中的解析逻辑:
session.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { completion(.failure(.invalidData)) return } do { let decoder = JSONDecoder() // 也可以开启自动蛇形转驼峰,省略CodingKeys的手动编写 // decoder.keyDecodingStrategy = .convertFromSnakeCase let responseData = try decoder.decode(RootResponse.self, from: data) // 直接读取字段即可得到无转义的正常文本 print(responseData.result.name) completion(.success(responseData)) } catch { completion(.failure(.decodingProblem)) } }.resume()
方案2:使用JSONSerialization时单独读取字段
直接打印JSONSerialization返回的Any类型对象时,系统会自动将非ASCII字符转为Unicode转义序列做调试输出,只需取出对应字段转成String即可得到正常内容:
do { guard let jsonDict = try JSONSerialization.jsonObject(with: data) as? [String: Any], let result = jsonDict["result"] as? [String: Any], let name = result["name"] as? String else { completion(.failure(.invalidData)) return } // 此时打印的name就是无转义的正常文本 print(name) } catch { completion(.failure(.decodingProblem)) }
方案3:需要输出完整无转义的JSON字符串
如果你需要将完整JSON转为无转义的字符串保存或输出,可以使用如下方式:
do { let jsonObj = try JSONSerialization.jsonObject(with: data) // 生成JSON数据时添加无转义配置 let formattedData = try JSONSerialization.data(withJSONObject: jsonObj, options: [.prettyPrinted, .withoutEscapingSlashes]) if let formattedStr = String(data: formattedData, encoding: .utf8) { // 此处的formattedStr就是无Unicode转义的完整JSON字符串 print(formattedStr) } } catch { completion(.failure(.decodingProblem)) }
额外优化提示
你当前请求头中的Content-Type配置有误,正确值应为application/json而非http,可以同步修改避免出现其他解析问题。
内容的提问来源于stack exchange,提问作者Jurij Husak
相关产品推荐
相关产品推荐

