【发布时间】:2018-05-28 09:09:09
【问题描述】:
我试图解析一些 JSON 数据,但遇到了一些麻烦。这是 JSON:
{
"result": {
"artist": {
"name": "The Beatles"
},
"track": {
"name": "Yesterday",
"text": "[Verse 1]\nYesterday\nAll my troubles seemed so far away\nNow it looks as though they're here to stay\nOh, I believe in yesterday\n\n[Verse 2]\nSuddenly\nI'm not half the man I used to be\nThere's a shadow hanging over me\nOh, yesterday came suddenly\n\n[Chorus]\nWhy she had to go\nI don't know, she wouldn't say\nI said something wrong\nNow I long for yesterday\n\n[Verse 3]\nYesterday\nLove was such an easy game to play\nNow I need a place to hide away\nOh, I believe in yesterday\n\n[Chorus]\nWhy she had to go\nI don't know, she wouldn't say\nI said something wrong\nNow I long for yesterday\n\n[Verse 4]\nYesterday\nLove was such an easy game to play\nNow I need a place to hide away\nOh, I believe in yesterday",
"lang": {
"code": "en",
"name": "English"
}
},
"copyright": {
"notice": "Yesterday lyrics are property and copyright of their owners. Commercial use is not allowed.",
"artist": "Copyright The Beatles",
"text": "All lyrics provided for educational purposes and personal use only."
},
"probability": "75.00",
"similarity": 1
}
}
到目前为止,这是我的代码:
guard let url = URL(string: "https://orion.apiseeds.com/api/music/lyric/Beatles\Yesterday?apikey=xxx") else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error!)
}
guard let data = data else { return }
do {
let data = try JSONDecoder().decode(Result.self, from: data)
print(data)
} catch let jsonError {
print(jsonError)
}
}.resume()
struct Result: Codable {
let artist: [Artist]
}
struct Artist: Codable {
let name: String
}
我尝试运行它时遇到的错误是:
keyNotFound(CodingKeys(stringValue: "artist", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "否 与键 CodingKeys 关联的值(stringValue: \"artist\", intValue: nil) (\"艺术家\").", 基础错误: nil))
我想做的就是从歌曲中获取歌词。 请有人看看这个,因为我很挣扎。
【问题讨论】:
-
Result 中的 "artist" 不是一个数组,而是一个对象。将结果更改为 让艺术家:艺术家
-
我刚试过。这是错误:keyNotFound(CodingKeys(stringValue: "artist", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"artist\", intValue : nil) (\"艺术家\").", 基础错误: nil))
-
“结果”也不是顶级的。您应该有一些包装结果的 Codable,因为它在 json 中:
struct ResultResponse: Codable { let result: Result } -
请尽可能作为答案!