Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 3 JSON错误?_Json_Swift - Fatal编程技术网

Swift 3 JSON错误?

Swift 3 JSON错误?,json,swift,Json,Swift,我似乎无法编译我的代码,无论我如何摆弄它。我想我需要另一个视角 在“let image=data[“images”]as![String:AnyObject] xcode一直告诉我“不能用'String'类型的索引为'[[String:AnyObject]]'类型的值下标” 首先,在Swift 3中,JSON字典是[String:Any] 您的错误(开发人员错误)是使用数组数据作为循环的索引变量。 将下划线替换为anItem,并使用anItem[“images”] 注意:键images表示多个项

我似乎无法编译我的代码,无论我如何摆弄它。我想我需要另一个视角

在“let image=data[“images”]as![String:AnyObject]

xcode一直告诉我“不能用'String'类型的索引为'[[String:AnyObject]]'类型的值下标”


首先,在Swift 3中,JSON字典是
[String:Any]

您的错误(开发人员错误)是使用数组
数据
作为循环的索引变量。 将下划线替换为
anItem
,并使用
anItem[“images”]


注意:键
images
表示多个项目,因此值也可以是一个数组。

正如Martin所说,您的
数据
是一个字典数组。因此,反复阅读这些词典:

if let arrayOfData = json["data"] as? [[String : Any]] {
    for individualData in arrayOfData {
        if let image = individualData["images"] as? [String : Any], 
            let standardResolution = image["standard_resolution"] as? [String : Any], 
            let url = standardResolution["url"] as? String {
                // now do something with URL
                print(url)
        }
    }
}

我建议您避免使用
强制投射/展开。当处理来自远程源的数据时,您应该更优雅地处理其中一个下标无法检索到您期望的数据的情况。

这既不是Swift 3也不是JSON错误<代码>数据
是一组字典。您已经对其条目进行了迭代,但由于我不知道的原因,请使用通配符
\uuu
作为循环变量。首先检查数组或字典。否则,请使用此易于处理的json数据。@BHAVIKPANCHAL因此我必须使用[[String:AnyObject]]来打印数据您是否获得json中的值?@BHAVIKPANCHAL是的,它是JSONA根据,
images
是一个字典,而不是数组。@Rob感谢您的澄清。命名不直观。
   let json = try JSONSerialization.jsonObject(with: data!) as! [String : Any]

    if let data = json["data"] as? [[String : Any]] {
        for anItem in data {
            let image = anItem["images"] as! [String : Any]
            let standardResolution = image["standard_resolution"] as! [String : Any]
            let url = standardResolution["url"] as! String
            print(url)
        }
    }
if let arrayOfData = json["data"] as? [[String : Any]] {
    for individualData in arrayOfData {
        if let image = individualData["images"] as? [String : Any], 
            let standardResolution = image["standard_resolution"] as? [String : Any], 
            let url = standardResolution["url"] as? String {
                // now do something with URL
                print(url)
        }
    }
}