【发布时间】:2016-04-26 13:20:46
【问题描述】:
我正在调用 Spotify API 方法来检索用户保存的曲目。在解析返回数据时,我调用了
let jsonObject = try NSJSONSerialization.JSONObjectWithData(dataFromNetwork, options: []) as! NSDictionary
当我打印出我得到的结果时:
{
href = "https://api.spotify.com/v1/me/tracks?offset=0&limit=20";
items = (
{
"added_at" = "2016-04-17T18:35:07Z";
track = {
album = {
"album_type" = album;
"available_markets" =
....
}
有些键不是字符串。因此,当我尝试浏览容器时,它会返回错误。
我首先导航到曲目列表:
let tracks = jsonObject["items"] as! [NSDictionary]
此代码不会产生错误。但是,当我遍历数组时,我尝试访问轨道的“名称”键:
let title = track["name"] as! String
这段代码使程序崩溃,当我查看 JSON 时:
name = <redacted>
键和值都没有双引号。
【问题讨论】:
-
你需要对这些字符串进行编码
-
哪个键不是字符串?你是怎么确认的?
-
你能告诉我哪个键不是正确的字符串吗?
-
Some of the keys aren't strings那不是 JSON。 // 但是,实际上,我认为您犯了一个经典错误:您正在查看print或NSLog的结果:在这两种情况下,某些键/值将在不带引号的情况下打印。但它们仍然是字符串。 -
Swift 不会将字典打印为 JSON,而是将字典打印为 ASCII plist,这是一种较旧的、外观相似但编码此类数据的不同方式。你不能混合和匹配这些。因此,不确定您对某些键不是字符串的假设是否有效。我认为您被误导了,您的问题是其他问题,例如 Michael Dautermann 的回答,也许有些条目没有某些键。
标签: ios swift dictionary spotify nsjsonserialization