I still learning this Codable/Decodable
new in Swift 4 for JSON parsing.
I am able to build a struct and grab the temperature keys but the Pump and other items like it are numeric strings that could be 1 to n. What is the best way to parse those into an array or dictionary. I would assume a for loop?
public struct ServerReponse: Codable {
let temperature: Temperature
let circuit: Circuit
}
public struct Circuit: Codable {
let number: Int
let numberStr: String
let name: String
let circuitFunction: String
let status: Int
let freeze: Int
let delay: Int
let friendlyName: String
let light: Light?
}
public struct Light: Codable {
let pump: Int
let position: Int
let colorStr: String
let color: Int
let colorSet: Int
let colorSetStr: String
let prevColor: Int
let prevColorStr: String
let colorSwimDelay: Int
let mode: Int
let modeStr: String
}
public struct Temperature : Codable {
let poolTemp: Int
let airTemp: Int
let poolSetPoint: Int
let heaterActive: Int
}
...
let poolData = try? JSONDecoder().decode(ServerReponse.self, from: data)
print(poolData?.temperature)
I am having issues parsing the next section "circuit" where there could be 1 to many number keys then the circuit struc itself below each one of those.
Here is some of the JSON I am working with...
{
"temperature": {
"poolTemp": 85,
"spaTemp": 85,
"airTemp": 75,
"solarTemp": 0,
"freeze": 0,
"poolSetPoint": 82,
"poolHeatMode": 1,
"poolHeatModeStr": "Heater",
"spaSetPoint": 80,
"spaManualHeatMode": "Off",
"spaHeatMode": 0,
"spaHeatModeStr": "OFF",
"heaterActive": 0
},
"circuit": {
"1": {
"number": 1,
"numberStr": "circuit1",
"name": "SPA",
"circuitFunction": "Spa",
"status": 0,
"freeze": 0,
"macro": 0,
"delay": 0,
"friendlyName": "SPA"
},
"2": {
"number": 2,
"numberStr": "circuit2",
"name": "POOL LIGHT",
"circuitFunction": "Intellibrite",
"status": 0,
"freeze": 0,
"macro": 0,
"delay": 0,
"friendlyName": "POOL LIGHT",
"light": {
"position": 1,
"colorStr": "off",
"color": 0,
"colorSet": 12,
"colorSetStr": "Magenta",
"prevColor": 0,
"prevColorStr": "White",
"colorSwimDelay": 5,
"mode": 0,
"modeStr": "Off"
}
},
"3": {
"number": 3,
"numberStr": "circuit3",
"name": "AUX 2",
"circuitFunction": "Generic",
"status": 1,
"freeze": 0,
"macro": 0,
"delay": 0,
"friendlyName": "OUTLET - PINE TREE"
},
"4": {
"number": 4,
"numberStr": "circuit4",
"name": "AUX 3",
"circuitFunction": "Generic",
"status": 1,
"freeze": 0,
"macro": 0,
"delay": 0,
"friendlyName": "OUTLET - FOUNTAIN"
},
"5": {
"number": 5,
"numberStr": "circuit5",
"name": "AUX 4",
"circuitFunction": "Generic",
"status": 0,
"freeze": 0,
"macro": 0,
"delay": 0,
"friendlyName": "AUX 4"
},
"6": {
"number": 6,
"numberStr": "circuit6",
"name": "POOL",
"circuitFunction": "Pool",
"status": 1,
"freeze": 1,
"macro": 0,
"delay": 0,
"friendlyName": "POOL"
},
.... {more keys} ....
}
See Question&Answers more detail:
os