[swift]从 JSON 文件获取数据不起作用

标签: json Swift
发布时间: 2017/3/5 21:43:51
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试着从 JSON (http://www.openligadb.de/api/getmatchdata/bl1/2014/15) 获取数据。我想要与目标、 位置、 团队每一场比赛...... 我试过但它不会工作。

    let url = "http://www.openligadb.de/api/getmatchdata/bl1/2014/15"

    //parse url

    if let JSONData = NSData(contentsOfURL: NSURL(string: url)!) {

        if let json = (try? NSJSONSerialization.JSONObjectWithData(JSONData, options: [])) as? NSDictionary {

             //handle json

        }
    }

它不会在第二的 if 语句中的步骤 ( if let json = (try?... )。 我希望你能帮我。

编辑获取数据的字典︰

                    //Data Team1
                    if let team1 = object["Team1"] as? NSDictionary {

                            if let name = team1["TeamName"] as? String {
                                print("Name Team1: \(name)")
                            }
                            if let logo = team1["TeamIconUrl"] as? String {

                                print("Logo Team1: \(logo)")
                            }

                            // Etc.

                    }

解决方法 1:

你需要做什么是了解你的 JSON 结构︰ 第一,您有一个数组不是一本字典。

此数组具有词典,每个抱着字典的数组。

这可能听起来复杂,但其实简单,你只是跟随你的 JSON 结构和解码值与正确的类型。

在 JSON 数组开头 [ 和一本字典入手 { (另外,小心不要混淆与swift的数组和字典一此 JSON 语法)。

您的代码可以是这样的例如︰

do {
    let url = "http://www.openligadb.de/api/getmatchdata/bl1/2014/15"
    if let url = NSURL(string: url),
           JSONData = NSData(contentsOfURL: url),
           jsonArray = try NSJSONSerialization.JSONObjectWithData(JSONData, options: []) as? NSArray {
            for object in jsonArray {
                if let goalsArray = object["Goals"] as? NSArray {
                    // Each "goal" is a dictionary
                    for goal in goalsArray {
                        print(goal)
                        if let name = goal["GoalGetterName"] as? String {
                            print("Name: \(name)")
                        }
                        if let ID = goal["GoalID"] as? Int {
                            print("ID: \(ID)")
                        }
                        // Etc.
                    }
                }
            }
    }
} catch {
    print(error)
}

更新︰ 你快到了 !但是"Team1"是一本字典,不是一个数组。:)

这里是解决方案︰

do {
    let url = "http://www.openligadb.de/api/getmatchdata/bl1/2014/15"
    if let url = NSURL(string: url),
        JSONData = NSData(contentsOfURL: url),
        jsonArray = try NSJSONSerialization.JSONObjectWithData(JSONData, options: []) as? NSArray {
        for object in jsonArray {
            if let team1 = object["Team1"] as? NSDictionary {
                if let name = team1["TeamName"] as? String {
                    print("Name Team1: \(name)")
                }
                if let logo = team1["TeamIconUrl"] as? String {
                    print("Logo Team1: \(logo)")
                }
            }
        }
    }
} catch {
    print(error)
}
赞助商