使用JSON检索图像

时间:2015-05-28 21:04:45

标签: ios json swift

我正在制作一个化学测验应用程序。由于分子,问题需要以图像的形式出现。下面是我遇到问题的代码的一部分:

func getconcept1questions() -> [Concept1Questions] {
    // chercher json file
    var questions:[Concept1Questions] = [Concept1Questions]()

    // chercher json array de dictionaires
    let jsonobjects: [NSDictionary] = self.getjsonfile()

    var index:Int
    for index = 0;
        index < jsonobjects.count; index++
    {
            // json dictionaire actuel
            let jsondictionary:NSDictionary = jsonobjects[index]

            // creer un objet question
            var questionobject:Concept1Questions = Concept1Questions()

            // assigner les valuers de chaque couple à l'objet question
            questionobject.question = UIImage(named: jsondictionary["question"] as! String)
            questionobject.answer = UIImage(named: jsondictionary["answer"] as! String)
            questions.append(questionobject)
    }

基本上,此函数的目的是从json文件中获取问题(图像)。在json文件中,名称是字符串,例如:

"question":"conceptquestion1",
answer":"conceptanswer1"

图像保存在Xcode项目中的图像资源中。

具体来说,在这行代码中,我收到一条错误消息:

// assigner les valuers de chaque couple à l'objet question
questionobject.question = UIImage(named: jsondictionary["question"] as! String)
questionobject.answer = UIImage(named: jsondictionary["answer"] as! String)

错误消息显示:

  

“无法指定”UIImage?“类型的值来键入”String“

关于如何让儿子展示图像的任何想法?我只是需要它来识别它正在搜索的数据应该与我保存在图像资源文件夹中的图像的文件名相匹配。

我有另一个函数来获取json文件(在第8行中调用的函数)。这是该功能,只是它可能会有所帮助:

func getjsonfile() -> [NSDictionary] {
    // faire un objet nsurl qui dirige vers le fichier json dans notre app bundle
    let appBundlePath:String? = NSBundle.mainBundle().pathForResource("concept1", ofType: "json")

    // ici on utilise optional binding pour verifier qu'il y a bien une voie vers le fichier
    if let realbundlepath = appBundlePath {
        // la voie existe
        let urlpath:NSURL? = NSURL(fileURLWithPath: realbundlepath)

        if let realurlpath = urlpath {
            // l'objet USURL a été bien creé. maintenant on cree l'objet NSDATA
            let jsondata:NSData? = NSData(contentsOfURL: realurlpath)

            if let realjsondata = jsondata {
                // nsdata existe. utiliser nsjsonserialization pour parser le data et creer l'array
                let arrayofdictionaries:[NSDictionary]? = NSJSONSerialization.JSONObjectWithData(realjsondata, options: NSJSONReadingOptions.MutableContainers, error: nil) as! [NSDictionary]?

                if let realarrayofdictionaries = arrayofdictionaries {
                    // on a reussi a parser l'array de diccionaires
                    return realarrayofdictionaries
                }

1 个答案:

答案 0 :(得分:0)

我不知道IOS开发,但我知道JSON。

您可以做的是在base64中对图像进行编码。这将为您提供一个长字符串,您可以将其作为json数据。

您可以使用此网站将图像编码为base64字符串http://www.base64-image.de/

您的IOS语言中可能已经存在编码/解码base64字符串的库。

这是很常见的事情。这允许您将图像作为字符串数据而不是二进制形式。

希望它有所帮助!

更新

快速谷歌搜索显示,Swift具有编码图像和解码base64字符串的功能。

http://iosdevelopertips.com/swift-code/base64-encode-decode-swift.html