Как пропарсить JSON файл в Swift data
Есть JSON файлы от с такой структурой. 818, 819,820 и т.д. - номера солов(дней) меняются ежедневно.
{
"818":{
"First_UTC":"2021-03-15T20:01:49Z",
"Last_UTC":"2021-03-16T17:32:54Z",
"Month_ordinal":12,
"Northern_season":"late winter",
"PRE":{
"av":727.696,
"ct":109855,
"mn":710.223,
"mx":743.946
},
"Season":"winter",
"Southern_season":"late summer",
"WD":{
"most_common":null
}
},
"819":{
"First_UTC":"2021-03-16T17:32:59Z",
"Last_UTC":"2021-03-17T18:12:29Z",
"Month_ordinal":12,
"Northern_season":"late winter",
"PRE":{
"av":730.402,
"ct":100681,
"mn":709.8325,
"mx":744.4856
},
"Season":"winter",
"Southern_season":"late summer",
"WD":{
"most_common":null
}
},
"820":{
"First_UTC":"2021-03-17T18:12:34Z",
"Last_UTC":"2021-03-18T18:52:04Z",
"Month_ordinal":12,
"Northern_season":"late winter",
"PRE":{
"av":728.2,
"ct":88500,
"mn":709.7541,
"mx":741.3344
},
"Season":"winter",
"Southern_season":"late summer",
"WD":{
"most_common":null
}
},
"821":{
"First_UTC":"2021-03-18T18:52:09Z",
"Last_UTC":"2021-03-19T19:31:39Z",
"Month_ordinal":12,
"Northern_season":"late winter",
"PRE":{
"av":729.649,
"ct":88777,
"mn":710.0807,
"mx":744.1994
},
"Season":"winter",
"Southern_season":"late summer",
"WD":{
"most_common":null
}
},
"sol_keys":[
"818",
"819",
"820",
"821"
],
"validity_checks":{
"818":{
"PRE":{
"sol_hours_with_data":[
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23
],
"valid":true
}
},
"819":{
"PRE":{
"sol_hours_with_data":[
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23
],
"valid":true
}
},
"820":{
"PRE":{
"sol_hours_with_data":[
0,
1,
2,
3,
4,
5,
6,
7,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23
],
"valid":true
}
},
"821":{
"PRE":{
"sol_hours_with_data":[
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23
],
"valid":true
}
},
"822":{
"PRE":{
"sol_hours_with_data":[
0,
1,
2,
3,
4,
5,
6,
7,
8,
17,
18,
19,
20,
21,
22,
23
],
"valid":false
}
},
"823":{
"PRE":{
"sol_hours_with_data":[
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
21,
22,
23
],
"valid":false
}
},
"824":{
"PRE":{
"sol_hours_with_data":[
0,
1,
2,
3,
4,
5,
6
],
"valid":false
}
},
"sol_hours_required":18,
"sols_checked":[
"818",
"819",
"820",
"821",
"822",
"823",
"824"
]
}
}
Создана структура:
struct SolData: Decodable {
let season: String?
let PRE: PRE?
struct PRE: Decodable {
let av: Double?
let mn: Double?
let mx: Double?
}
}
Далее
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let urlString = "https://api.nasa.gov/insight_weather/?api_key=DEMO_KEY&feedtype=json&ver=1.0"
guard let url = URL(string: urlString) else { return}
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let safeData = data else { return }
guard error == nil else { return }
//some code here
}.resume()
}
}
Заранее благодарю!
Ответы (1 шт):
Автор решения: Vitaly
→ Ссылка
Добавьте строку вместо //some code here:
let result = try JSONDecoder().decode(SolData.self, from: safeData)