【问题标题】:Spotify Returns Invalid NSDictionarySpotify 返回无效的 NSDictionary
【发布时间】: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。 // 但是,实际上,我认为您犯了一个经典错误:您正在查看printNSLog 的结果:在这两种情况下,某些键/值将在不带引号的情况下打印。但它们仍然字符串。
  • Swift 不会将字典打印为 JSON,而是将字典打印为 ASCII plist,这是一种较旧的、外观相似但编码此类数据的不同方式。你不能混合和匹配这些。因此,不确定您对某些键不是字符串的假设是否有效。我认为您被误导了,您的问题是其他问题,例如 Michael Dautermann 的回答,也许有些条目没有某些键。

标签: ios swift dictionary spotify nsjsonserialization


【解决方案1】:

这句话有点太绝对了:

let title = track["name"] as! String

将其更改为“if let”语句:

if let title = track["name"] as? String
{
   // do something if it's a valid title

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多