I'm trying to get JSONDecoder to decode data from an API. I know the content of the data is valid JSON has I've downloaded it independently and verified it.
let decoder = JSONDecoder()
let dataStr = String(bytes: data, encoding: String.Encoding.utf8)
print(dataStr)
do {
let combinedForecast = try decoder.decode(NWCombinedForecast.self, from: data)
print("getting data")
completion?(combinedForecast)
} catch {
let msg = error.localizedDescription
print(msg)
}
I can use the inspector to see that dataStr is set and valid. I can also see data is defined as Foundation.Data, but the try line always throws and error and before 'getting data' is printed, it drops down to the catch block. Below is the inspector showing that dataStr is set, hopefully showing that data is there, but decoder is not doing anything useful with it.
Incase it helps, this is the NWCombinedForecast struct that I am trying to decode the data into
public struct NWCombinedForecast: Codable {
let forecast: [NWForecast]
let summary: [NWSummary]
let location: NWLocation
}
Ah progress, Maybe the auto generation of the Swift model is at fault. There are optional parts of the JSON which it didn't pick up (sample must of contained them all) and when I used print(error) instead of print(error.localizedDescription) I got a more helpful output
keyNotFound(CodingKeys(stringValue: "precipitation_amount", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "forecast", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: "precipitation_amount", intValue: nil) ("precipitation_amount").", underlyingError: nil))