JSON文件格式问题

时间:2015-04-08 20:09:16

标签: ios iphone json swift

我一直在努力研究JSON几天,并意识到我正在犯一个基本错误。当我有一个像下面的JSON文件时,我的代码就在下面,它完美地工作:

{"team": [
        {
        "name": "Manchester United FC",
        "code": "MUFC"
        },
        {
        "name": "Swansea City",
        "code": "SWA"
        }
        ]
}

适用于上述JSON文件的代码:

func jsonParsing()
{
    let path: NSString = NSBundle.mainBundle().pathForResource("teams", ofType: "json")!

    var data : NSData = NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMapped, error: nil)!

    var dict: NSDictionary!=NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary


    for var i = 0 ; i < (dict.valueForKey("team") as NSArray).count ; i++
    {
        arrDict.addObject((dict.valueForKey("team") as NSArray) .objectAtIndex(i))
    }



}

但是,当我的JSON文件没有标题的引号时,它会导致一个&#34;致命错误:在解开一个Optional值时意外发现nil&#34;问题:

{team: [
        {
        name: "Manchester United FC",
        code: "MUFC"
        },
        {
        name: "Swansea City",
        code: "SWA"
        }
        ]
}

所以,你可能会问为什么我不能简单地使用引号以便它有效?好吧,我从网站上获取JSON信息,所以必须使用该格式。有关原始文件格式结帐的完整详细信息:

http://api.football-data.org/alpha/soccerseasons/354/teams

那么,我可以使用一个简单的设置,因此它使用我的JSON文件而不需要所有的双引号吗?

非常感谢,艾伦。

2 个答案:

答案 0 :(得分:2)

这些引号必须使JSON起作用。 http://www.w3schools.com/json/json_syntax.asp

答案 1 :(得分:0)

以下似乎有效:

{
    //let path: NSString = NSBundle.mainBundle().pathForResource("teams", ofType: "json")!

    //var data : NSData = NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMapped, error: nil)!

let url2 = NSURL(string: "http://api.football-data.org/alpha/soccerseasons/354/teams")

let data = NSData(contentsOfURL: url2!)

var dict = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary

    // var dict: NSDictionary!=NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary


    for var i = 0 ; i < (dict.valueForKey("teams") as NSArray).count ; i++
    {
        arrDict.addObject((dict.valueForKey("teams") as NSArray) .objectAtIndex(i))
    }



}

但是现在我更加困惑,因为每个人都说原始文件不是vaild:/想到有人吗?