JSON输出
{"inputs":{"lat":"29.93","lon":"-95.61","system_capacity":"30.30","azimuth":"180","tilt":"40","array_type":"1","module_type":"1","losses":"10"},"errors":[],"warnings":[],"version":"1.0.1","ssc_info":{"version":45,"build":"Linux 64 bit GNU/C++ Jul 7 2015 14:24:09"},"station_info":{"lat":29.93000030517578,"lon":-95.62000274658203,"elev":41.0,"tz":-6.0,"location":"None","city":"","state":"Texas","solar_resource_file":"W9562N2993.csv","distance":964},"outputs":{"ac_monthly":[3480.57373046875,3440.078369140625,3992.6513671875,3977.071533203125,4074.91357421875,3701.75,3897.655517578125,4248.00390625,4023.283447265625,4157.29931640625,3605.156005859375,3342.12890625],"poa_monthly":[139.791015625,140.18896484375,164.8218536376953,164.47149658203125,173.2971649169922,159.90576171875,169.84793090820312,186.20114135742188,173.14492797851562,176.2291717529297,148.28318786621094,136.62326049804688],"solrad_monthly":[4.509387493133545,5.006748676300049,5.316833972930908,5.4823832511901855,5.590230941772461,5.3301920890808105,5.4789652824401855,6.00648832321167,5.77149772644043,5.684812068939209,4.94277286529541,4.407201766967773],"dc_monthly":[3644.867919921875,3606.52001953125,4179.85107421875,4158.3193359375,4252.9140625,3865.03369140625,4069.092041015625,4432.62744140625,4198.369140625,4336.99609375,3767.055419921875,3490.091064453125],"ac_annual":45940.55859375,"solrad_annual":5.293959140777588,"capacity_factor":17.308107376098633}}{"inputs":{"lat":"29.93","lon":"-95.61","system_capacity":"30.30","azimuth":"180","tilt":"40","array_type":"1","module_type":"1","losses":"10"},"errors":[],"warnings":[],"version":"1.0.1","ssc_info":{"version":45,"build":"Linux 64 bit GNU/C++ Jul 7 2015 14:24:09"},"station_info":{"lat":29.93000030517578,"lon":-95.62000274658203,"elev":41.0,"tz":-6.0,"location":"None","city":"","state":"Texas","solar_resource_file":"W9562N2993.csv","distance":964},"outputs":{"ac_monthly":[3480.57373046875,3440.078369140625,3992.6513671875,3977.071533203125,4074.91357421875,3701.75,3897.655517578125,4248.00390625,4023.283447265625,4157.29931640625,3605.156005859375,3342.12890625],"poa_monthly":[139.791015625,140.18896484375,164.8218536376953,164.47149658203125,173.2971649169922,159.90576171875,169.84793090820312,186.20114135742188,173.14492797851562,176.2291717529297,148.28318786621094,136.62326049804688],"solrad_monthly":[4.509387493133545,5.006748676300049,5.316833972930908,5.4823832511901855,5.590230941772461,5.3301920890808105,5.4789652824401855,6.00648832321167,5.77149772644043,5.684812068939209,4.94277286529541,4.407201766967773],"dc_monthly":[3644.867919921875,3606.52001953125,4179.85107421875,4158.3193359375,4252.9140625,3865.03369140625,4069.092041015625,4432.62744140625,4198.369140625,4336.99609375,3767.055419921875,3490.091064453125],"ac_annual":45940.55859375,"solrad_annual":5.293959140777588,"capacity_factor":17.308107376098633}}
我正在使用以下课程。
class PVClass
{
struct Top : Decodable {
var Outputs: OutputsJSON?
var Inputs: InputsJSON?
enum CodingKeys : String, CodingKey {
case Inputs = "inputs"
case Outputs = "outputs"
}
}
struct InputsJSON: Decodable {
var lat: String?
var lon: String?
enum CodingKeys : String, CodingKey {
case lat = "lat"
case lon = "lon"
}
}
struct OutputsJSON: Decodable {
var dcMonthly: DC_MonthlyJSON?
struct DC_MonthlyJSON: Decodable {
var DC_Monthly: [String]?
enum CodingKeys : String, CodingKey {
case DC_Monthly = "dc_monthly"
}
}
}
}
我访问JSON。我可以打印'lat'变量值,但是dc_monthly数组给我0。我知道数组中有12个元素。即使我打印DC_Monthly.count的值也为0。如何访问数组元素?
let decoder = JSONDecoder()
let jsonData = try decoder.decode(PVClass.Top.self, from: data!)
print("Lat: ", jsonData.Inputs?.lat ?? "0")
print("dc_monthly: ", jsonData.Outputs?.dcMonthly?.DC_Monthly ?? "0")
答案 0 :(得分:0)
您的类定义与JSON的结构不匹配。请尝试以下方法:
struct Top: Codable {
let inputs: Inputs
let outputs: Outputs
}
struct Inputs: Codable {
let lat, lon: String
}
struct Outputs: Codable {
let dcMonthly: [Double]
enum CodingKeys: String, CodingKey {
case dcMonthly = "dc_monthly"
}
}
do {
let top = try JSONDecoder().decode(Top.self, from: data)
print(top.outputs.dcMonthly.count) // 12
} catch {
print(error)
}