从JSON文件中获取数据不起作用

时间:2016-01-29 13:29:10

标签: json swift parsing

我尝试从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 个答案:

答案 0 :(得分:0)

您需要做的是了解您的JSON结构:首先是数组,而不是字典。

这个数组有字典,每个字典都有一个字典数组。

听起来可能很复杂但实际上很简单,只需遵循JSON的结构并使用正确的类型解码值。

在JSON中,数组以[开头,字典以{开头(另外,请注意不要将此JSON语法与Swift的数组和字典混淆)。

您的代码可能是这样的,例如:

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)
}