在回调中分别处理 JSON 响应数据和 String 响应数据
Posted
技术标签:
【中文标题】在回调中分别处理 JSON 响应数据和 String 响应数据【英文标题】:Handle JSON response data and String response data respectively in callback 【发布时间】:2017-08-18 12:40:34 【问题描述】:我的后端可以返回 JSON 或纯字符串数据作为响应。
let task = session.dataTask(with: request as URLRequest) data, response, error in
if error == nil
// Handle response data, but it could be JSON & it could also be String data, how to check and distinguish & handle respectively?
if let data = data
// it fails here if the data is String
if let jsonDataDict = try? JSONSerialization.jsonObject(with: data) as? JSONDataDict
else
在响应回调中,如何判断响应data
是JSON
格式还是String
,分别如何处理?
【问题讨论】:
【参考方案1】:尝试使用 String
初始化程序将数据以 UTf8 作为字符串编码传递
if let data = data
// it fails here if the data is String
if let jsonDataDict = try? JSONSerialization.jsonObject(with: data) as? JSONDataDict
else
if let dataString = String(data: data, encoding: .utf8)
debugPrint(dataString)
【讨论】:
我可以换成else if let dataString=...
吗?【参考方案2】:
let jsonDataDict = try? JSONSerialization.jsonObject(with: data) as? JSONDataDict
if let strJSON = jsonDataDict as? [String:String] //you can cast in string as
if strJSON?.isEmpty == false
//It is empty
【讨论】:
【参考方案3】:if let data = data
if data is Data
//do operation with Data
if let jsonDataDict = try? JSONSerialization.jsonObject(with: data) as? JSONDataDict
else if data is String
//do operation with string
AppleDoc
使用类型检查运算符 (is) 检查实例是否属于 某些子类类型。类型检查运算符返回 true,如果 instance 属于该子类类型,如果不是,则为 false。
【讨论】:
谢谢,如果我遵循相同的数据类型检查方式,如何检查 JSON 数据是包含对象列表还是一个对象? 当您使用jsonDataDict
时,它会为您提供字典计数以上是关于在回调中分别处理 JSON 响应数据和 String 响应数据的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 如何从响应 JSON API 中分离单个数据