在回调中分别处理 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 
          

    

在响应回调中,如何判断响应dataJSON格式还是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 中分离单个数据

应用程序如何处理异步响应 - 通过回调

Promise API 简介

如何处理大 JSON 响应

Objective-C:来自 jquery 回调的 json 响应

python 怎么把一个类传递给JAVA,然后Java调用python类的回调函数