首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解析来自web json的图像

解析来自web json的图像
EN

Stack Overflow用户
提问于 2018-06-02 17:54:58
回答 1查看 80关注 0票数 0

我有一个类似如下的json文件:

代码语言:javascript
复制
{
    "adTitle": "My Title",
    "adURL": "https://mylink.com/",
    "adImageURL": "http://mywebsite/bannerx@3x.png"
}

我从网站获取JSON值:http://mywebsite.com/file.json

问题是,广告不知何故没有加载adImageURL,所以当我按下UIImageView,但当我按下UIImageView应该在的区域时,它会打开我的adURL。这是我在JSON中使用的代码:

代码语言:javascript
复制
var imageURL:String = "http://mywebsite/bannerx@3x.png"
    var adURL:String = "https://mylink.com/"

    func loadAdvertisement() {

        // Set up the URL request
        let todoEndpoint: String = "http://mywebsite.com/file.json"

        guard let url = URL(string: todoEndpoint) else {
            print("Error: cannot create URL")
            return
        }
        let urlRequest = URLRequest(url: url)

        // set up the session
        let config = URLSessionConfiguration.default
        let session = URLSession(configuration: config)

        // make the request
        let task = session.dataTask(with: urlRequest) {
            (data, response, error) in
            // check for any errors
            guard error == nil else {
                // print("error calling GET on /todos/1")
                // print(error!)
                return
            }
            // make sure we got data
            guard let responseData = data else {
                print("Error: did not receive data")
                return
            }
            // parse the result as JSON, since that's what the API provides
            do {
                guard (try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: AnyObject]) != nil else {
                    print("error trying to convert data to JSON")
                    return
                }

                let json = try JSONSerialization.jsonObject(with: responseData, options:.allowFragments) as! [String:AnyObject]


                if (json != nil) {

                    self.imageURL = (json["adImageURL"] as? String)!
                    self.adURL = (json["adURL"] as? String)!

                    print(self.imageURL)
                    print(self.adURL)

                    DispatchQueue.main.async { () -> Void in

                        self.loadAdImage(self.imageURL)
                    }

                }


            } catch  {
                print("error trying to convert data to JSON")
                return
            }
        }

        task.resume()

        // let jsonURL = URL(string: "http://mywebsite.com/file.json")

        // self.getDataFromUrl(jsonURL!, completion: (data:Data?, response:URLResponse?, error:Error?)) -> Void


    }

    func loadAdImage(_ url:String) {

        getDataFromUrl(URL(string: url)!) { (data, response, error)  in
            DispatchQueue.main.async { () -> Void in
                guard let data = data, error == nil else { return }
                print(response?.suggestedFilename ?? "")
                print("Download Finished")
                self.advertImageView.image = UIImage(data: data)
            }
        }
    }

    func getDataFromUrl(_ url:URL, completion: @escaping ((_ data: Data?, _ response: URLResponse?, _ error: NSError? ) -> Void)) {

        URLSession.shared.dataTask(with: url) { (data:Data?, response:URLResponse?, error:Error?) in

            completion(data, response, error as NSError?)


        }.resume()

    }

在事件日志中,is将输出这两个print("error trying to convert data to JSON")命令。我以前在我的项目中使用过这个代码,它工作得很好,但我不知道为什么它不再工作了。

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 18:15:26

添加消息以捕获并检查实际出现的错误,如下所示:

代码语言:javascript
复制
 do {

        let json = try JSONSerialization.jsonObject(with: responseData, options:.allowFragments) as! [String:AnyObject]        

    } catch let message  {
        print("error trying to convert data to JSON" + "\(message)")
        return
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50655653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档