Ios 为什么是;“数据”;不是字典

Ios 为什么是;“数据”;不是字典,ios,json,swift,swifty-json,Ios,Json,Swift,Swifty Json,我正在尝试解析使用SwiftyJSON从API获得的JSON,它给了我以下错误: 可选(Error Domain=SwiftyJSONErrorDomain code=901“Dictionary[“data”]失败,它不是Dictionary”UserInfo={NSLocalizedDescription=Dictionary[“data”]失败,它不是Dictionary}) JSON: { "status": 200, "error": "", "data": { "cursus

我正在尝试解析使用SwiftyJSON从API获得的JSON,它给了我以下错误:
可选(Error Domain=SwiftyJSONErrorDomain code=901“Dictionary[“data”]失败,它不是Dictionary”UserInfo={NSLocalizedDescription=Dictionary[“data”]失败,它不是Dictionary})

JSON:

{
"status": 200,
"error": "",
"data": {
    "cursusses": [
        {
            "cursus": {
                "curId": 1,
                "curNaam": "Lightroom Tips & Tricks",
                "catId": 1,
                "curInfo": "Praktische en korte Tips en Tricks om sneller en prettiger met Lightroom te kunnen werken.",
                "curThumbnail": "lr5-tips-en-tricks.jpg"
            }
        },
        {
            "cursus": {
                "curId": 2,
                "curNaam": "Lightroom Fotobewerkingen",
                "catId": 1,
                "curInfo": "Per video wordt er in deze cursus een nabewerking uitgevoerd op een foto. Een leerzame manier om te zien hoe je in de praktijk foto's kunt nabewerken terwijl je daarnaast veel praktische tips krijgt over het gebruik van Lightroom 5.",
                "curThumbnail": "lr5-bewerkingen.jpg"
            }
        },
        {
            "cursus": {
                "curId": 3,
                "curNaam": "Photoshop Fotobewerkingen",
                "catId": 2,
                "curInfo": "Per video wordt er in deze cursus een nabewerking uitgevoerd op een foto. Een leerzame manier om te zien hoe je in de praktijk foto's kunt nabewerken terwijl je daarnaast veel praktische tips krijgt over het gebruik van Photoshop.",
                "curThumbnail": "photoshop-cc.jpg"
            }
        },
        {
            "cursus": {
                "curId": 4,
                "curNaam": "Basiscursus Lightroom 5",
                "catId": 1,
                "curInfo": "Leer de basisvaardigheden voor het werken met Adobe Photoshop Lightroom. Over het werken met catalogussen, importeren, het selectieproces, de nabewerking en het exporteren.",
                "curThumbnail": "basiscursus-lightroom-5.jpg"
            }
        },
        {
            "cursus": {
                "curId": 5,
                "curNaam": "Photofacts Academy",
                "catId": 3,
                "curInfo": "Toelichting over het gebruiken van de Photofacts Academy website.",
                "curThumbnail": "photofacts-academy.jpg"
            }
        },
        {
            "cursus": {
                "curId": 6,
                "curNaam": "Lightroom 5 web module",
                "catId": 1,
                "curInfo": "Met de Lightroom web module kun je eenvoudig van je foto's een online galerij maken.",
                "curThumbnail": "lr5-web-intro.jpg"
            }
        },
        {
            "cursus": {
                "curId": 7,
                "curNaam": "Photoshop Tips & Tricks",
                "catId": 2,
                "curInfo": "Praktische tips voor het gebruik van Adobe Photoshop CC.",
                "curThumbnail": "photoshop-cc-splash.jpg"
            }
        }
    ]
}
}
我目前正试图使用这段代码来解析数据,此函数在Alamofire请求的completionHandler中调用:

func succesCurResponse(let response : Response<String, NSError>) {
    if let value = response.result.value {
        let json = JSON(value)
        let error = json["error"].stringValue
        print(json["data"].error)
        if(error.isEmpty) {
            for(var i = 0; i < json["data"]["cursusses"].count; i++) {
                let name = json["data"]["cursusses"][i]["cursus"]["curNaam"].stringValue
                let id = json["data"]["cursusses"][i]["cursus"]["curId"].intValue
                let catId = json["data"]["cursusses"][i]["cursus"]["catId"].intValue
                let info = json["data"]["cursusses"][i]["cursus"]["curInfo"].stringValue
                let thumbnail = json["data"]["cursusses"][i]["cursus"]["curThumbnail"].stringValue
                let newCur = Cursus()
                newCur.ID = id
                newCur.name = name
                newCur.info = info
                newCur.thumbnail = thumbnail
            }
        }
        else {
            print(error)
        }
    }
}
func-successcurrenresponse(let-response:response){
如果let value=response.result.value{
让json=json(值)
let error=json[“error”].stringValue
打印(json[“数据”]。错误)
if(error.isEmpty){
对于(var i=0;i

有什么建议吗?

对不起,我不知道。但是下面的Objective-C代码将帮助您解决问题

目标-C:

NSArray *cursussesArray = json[@"cursusses"];

for (NSDictionary *singlecursusseDict in cursussesArray) {
    NSLog(@"%@", singlecursusseDict);

    NSDictionary *cursus = singlecursusseDict[@"cursus"];
}
我尝试一下Swift

let cursussesArray:NSArray = json[“cursusses”]

for singlecursusseDict: NSDictionary in cursussesArray {
    print(singlecursusseDict)
    cursusDict: NSDictionary = json[“cursus”]
    print(cursusDict)
}

您是否尝试将json=json(value)设为!NSDictionary
?识别错误行将非常有帮助(对于试图理解错误的您和试图帮助您的人来说)。@Aisataev Swift发出警告,这是一种不相关的类型,因此强制转换将始终失败。此外,请尝试在那里放置一些断点,然后快速查看
json
,查看那里发生了什么。在启动for循环之前,您可能需要将
json[“data”]
强制转换到字典中。@NikolaiRuhe它通常不会给出警告,它只是完全跳过for块,我在代码中添加了一个
print(json[“data”].error)
以查看错误。错误在
data
上,not
诅咒
,并且对象无法强制转换为
NSArray
,因此这不起作用。