无法使用 alamofire 打印 json 值

Posted

技术标签:

【中文标题】无法使用 alamofire 打印 json 值【英文标题】:unable to print json value with alamofire 【发布时间】:2018-11-17 17:28:14 【问题描述】:

我正在尝试使用 flickr API 获取数据,我使用 Alamofire 和 swiftyJSON 编写了一个简单的代码来从 flickr 获取这些数据,但是我能够打印数据大小但是当我尝试打印 json 时,我的 catch块运行。我的代码如下所示

func getPhotos(completion: @escaping CompletionHandler) -> Void 

        let parameter: [String: Any] = [
            "method": PHOTOS_METHOD,
            "api_key": FLICKR_API_KEY,
            "per_page": PER_PAGE,
            "page": PAGE,
            "format": FORMAT_TYPE,
            "nojsoncallback": JSON_CALLBACK]

        Alamofire.request(FLICKR_URL, method: .get, parameters: parameter, encoding: JSONEncoding.default, headers: HEADER).responseString  (response) in

            if response.result.error == nil 

                guard let data = response.data else return

                do 
                    if let json = try JSON(data: data).array 
                        print(json)
                    
                    completion(true)
                 catch 
                    print("eroorrrre")
                    completion(false)
                

                print("CALL CORRECT")
                print(data)

                completion(true)
            
            else 
                completion(false)
                debugPrint(response.result.error as Any)
            
        
    

我的控制台日志

eroorrrre
CALL CORRECT
128 bytes

我不确定我在这里做错了什么,任何帮助都会得到帮助

【问题讨论】:

永远不会在 catch 子句中打印像 eroorrrre 这样的无意义文字字符串,打印 error 实例。它很可能向您显示什么您在这里做错了。如果出现错误,您将调用completion 两次。不要那样做。 感谢我会更正 【参考方案1】:

试试这个

Alamofire.request(FLICKR_URL, method: .get, parameters: parameter, headers: HEADER).responseJSON  response in // call responseJSON instead of responseString

    if response.result.isSuccess  // If http request is success

        let json: JSON = JSON(response.result.value!) // JSON format from SwiftyJSON (I suppose you are using it)

        guard let data = json.array else  // You suppose that json is array of objects
            print("Unexpected JSON format")
            completion(false)
        

        print(data) 
        completion(true)

     else 
        print(response.error)
        completion(false)
    

【讨论】:

谢谢,这工作正常,但我的代码为什么不能工作?我一直使用它,它总是有效的 @King 在你的情况下 response.data 的 JSON 格式不正确 嗨,请帮助检查这个问题***.com/questions/53360597/…

以上是关于无法使用 alamofire 打印 json 值的主要内容,如果未能解决你的问题,请参考以下文章

无法解析数据 JSON alamofire SwiftyJSON

Alamofire 在展开 Optional 时意外发现 nil,但我可以看到 JSON

使用 Alamofire 和 SwiftyJSON 正确解析具有多个对象的 JSON 数组

Alamofire / AlamofireObjectMapper - 如何从 responseObject 打印错误 json?

我的 JSON 解析失败

无法使用闭包使用 alamofire 解析 json