JSON解析Swift 4 [英] JSON Parsing Swift 4
问题描述
我试图解析一些JSON数据,但是遇到了一些麻烦.这是JSON:
I was trying to parse some JSON data but had some trouble. Here is the 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
}
}
这是到目前为止的代码:
And here is my code so far:
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
}
我尝试运行它时遇到的错误是:
The error that I get when I try to run it is:
keyNotFound(CodingKeys(stringValue:"artist",intValue:nil), Swift.DecodingError.Context(codingPath:[],debugDescription:否 与键CodingKeys(stringValue:\"artist \", intValue:nil)(\"artist \").,underlyingError:nil))
keyNotFound(CodingKeys(stringValue: "artist", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"artist\", intValue: nil) (\"artist\").", underlyingError: nil))
我要做的就是从这首歌中获取歌词. 请耐心等待,因为我正在努力挣扎很多.
All I would like to do is get the lyrics from the song. Please could someone look at this as I am struggling quite a lot.
推荐答案
如果某些东西带有nil,请为您的模型创建一个合适的结构,将其设置为可选,否则会崩溃,将 JSON 转换为对象,您将来可以使用此在线工具,很有用! https://app.quicktype.io/
Create a proper struct for your model if something comes with a nil, make it optional otherwise it will crash, to convert JSON to Objects you can use this online tool for the future, is quite useful! https://app.quicktype.io/
struct AudioSearch: Codable {
let result: Result
}
struct Result: Codable {
let artist: Artist
let track: Track
let copyright: Copyright
let probability: String
let similarity: Int
}
struct Artist: Codable {
let name: String
}
struct Copyright: Codable {
let notice, artist, text: String
}
struct Track: Codable {
let name, text: String
let lang: Lang
}
struct Lang: Codable {
let code, name: String
}
并使用这样的解码:
let result = try JSONDecoder().decode(AudioSearch.self, from: data)
这篇关于JSON解析Swift 4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!