我一直在努力研究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文件而不需要所有的双引号吗?
非常感谢,艾伦。
答案 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:/想到有人吗?