I'm using SwiftSoup in combination with Codable to get the correct element(s) and parse the data. However, I receive this error:
JSON decode failed: Swift.DecodingError.dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value.}))) I've looked online, ensure my data matches correctly, even change the expected types from Int to String but got an error stating an Int was expected.
This is the data I am receiving and can print in the console:
data - {"test":0,"ppace":85,"pshooting":92,"ppassing":91,"pdribbling":95,"pdefending":38,"pphysical":65,"acceleration":91,"sprintspeed":80,"agility":91,"balance":95,"reactions":94,"ballcontrol":96,"dribbling":96,"positioning":93,"finishing":95,"shotpower":86,"longshotsaccuracy":94,"volleys":88,"penalties":75,"interceptions":40,"headingaccuracy":70,"marking":32,"standingtackle":35,"slidingtackle":24,"vision":95,"crossing":85,"freekickaccuracy":94,"shortpassing":91,"longpassing":91,"curve":93,"jumping":68,"stamina":72,"strength":69,"aggression":44,"composure":96} This is my function:
func parseData() { do { let html = try String(contentsOf: url!, encoding: String.Encoding.ascii) let doc: Document = try! SwiftSoup.parse(html) let elements = try doc.getAllElements() for element in elements { switch element.id() { case "player_stats_json": let content = try! element.getElementsContainingText("ppace").text() print(content.utf8) let jsonData = content.data(using: .utf8) do { self.player = try JSONDecoder().decode(PlayerModel.self, from: Data(jsonData!)) } catch let jsonError as NSError { print("JSON decode failed: \(jsonError)") print("data - \(content)") } default: break } } } catch Exception.Error(type: let type, Message: let message) { print(type) print(message) } catch { print("") } } And this is my model file:
struct PlayerModel: Codable { var test: Int var ppace: Int var pshooting: Int var ppassing: Int var pdribbling: Int var pdefending: Int var pphysical: Int var acceleration: Int var sprintspeed: Int var agility: Int var balance: Int var reactions: Int var ballcontrol: Int var dribbling: Int var positioning: Int var finishing: Int var shotpower: Int var longshotsaccuracy: Int var volleys: Int var penalties: Int var interceptions: Int var headingaccuracy: Int var marking: Int var standingtackle: Int var slidingtackle: Int var vision: Int var crossing: Int var freekickaccuracy: Int var shortpassing: Int var longpassing: Int var curve: Int var jumping: Int var stamina: Int var strength: Int var aggression: Int var composure: Int } I've double and tripled checked the variable names match up with each key. I've pasted the outputted data in the console in an Online JSON validator, and no errors appear. I'm genuinley left scratching my head right now, because I can't understand where I've gone wrong.