gpt4 book ai didi

json - 无法将我的 JSON 附加到数组

转载 作者:可可西里 更新时间:2023-11-01 00:56:09 25 4
gpt4 key购买 nike

我正在尝试将我具有结构的 JSON 附加到数组,但它给了我错误:

Cannot convert value of type '[String:Any]' to expected argument type 'WeerItem'

其中WeerItem是这个:

import Foundation
struct WeerItem : CustomStringConvertible {
var description: String

let city : City?
let cod : Int?
let message : Double?
let cnt : Int?
let list : [List]?

init(dictionary: [String: Any]) {
self.city = dictionary["city"] as? City ?? nil
self.cod = dictionary["cod"] as? Int ?? 0
self.message = dictionary["message"] as? Double ?? 0.0
self.cnt = dictionary["cnt"] as? Int ?? 0
self.list = dictionary["list"] as? [List] ?? nil
}

}

这就是我调用 JSON 并将其添加到列表的方式

var weerItems : [WeerItem] = []
let task = session.dataTask(with: request as URLRequest,
completionHandler: { data, response, error -> Void in
do {
if let json = try JSONSerialization.jsonObject(with: data!) as? [[String: Any]] {
for weerData in json {
self.weerItems.append(weerData) //This line gives the error
}
}
} catch { print(error) }
})
task.resume()

示例 JSON:

{  
"city":{
"id":3080866,
"name":"Zakopane",
"coord":{
"lon":19.9507,
"lat":49.2969
},
"country":"PL",
"population":27580
},
"cod":"200",
"message":43.5092521,
"cnt":6,
"list":[
{
"dt":1513764000,
"temp":{
"day":-4,
"min":-9.63,
"max":-4,
"night":-9.63,
"eve":-7.41,
"morn":-4
},
"pressure":924.37,
"humidity":78,
"weather":[
{
"id":600,
"main":"Snow",
"description":"light snow",
"icon":"13d"
}
],
"speed":0.91,
"deg":339,
"clouds":36,
"snow":0.63
},
{
"dt":1513850400,
"temp":{
"day":-11.69,
"min":-15.84,
"max":-6.47,
"night":-6.47,
"eve":-6.71,
"morn":-14.78
},
"pressure":923.24,
"humidity":83,
"weather":[
{
"id":601,
"main":"Snow",
"description":"snow",
"icon":"13d"
}
],
"speed":1.01,
"deg":190,
"clouds":76,
"snow":2.73
},
{
"dt":1513936800,
"temp":{
"day":-3.4,
"min":-8.82,
"max":-2.63,
"night":-3.69,
"eve":-6.33,
"morn":-3.8
},
"pressure":923.89,
"humidity":93,
"weather":[
{
"id":601,
"main":"Snow",
"description":"snow",
"icon":"13d"
}
],
"speed":1.17,
"deg":309,
"clouds":48,
"snow":1.54
},
{
"dt":1514023200,
"temp":{
"day":-3.33,
"min":-5.25,
"max":-2.68,
"night":-2.68,
"eve":-5.01,
"morn":-2.94
},
"pressure":920.7,
"humidity":89,
"weather":[
{
"id":601,
"main":"Snow",
"description":"snow",
"icon":"13d"
}
],
"speed":2.93,
"deg":341,
"clouds":76,
"snow":5.34
},
{
"dt":1514109600,
"temp":{
"day":2.53,
"min":2.04,
"max":4.52,
"night":4.52,
"eve":3.25,
"morn":2.04
},
"pressure":947.42,
"humidity":0,
"weather":[
{
"id":600,
"main":"Snow",
"description":"light snow",
"icon":"13d"
}
],
"speed":5.23,
"deg":305,
"clouds":68,
"rain":3.79,
"snow":0.98
},
{
"dt":1514196000,
"temp":{
"day":3.68,
"min":-3.88,
"max":3.71,
"night":-3.88,
"eve":0.81,
"morn":3.71
},
"pressure":951.34,
"humidity":0,
"weather":[
{
"id":500,
"main":"Rain",
"description":"light rain",
"icon":"10d"
}
],
"speed":3.1,
"deg":270,
"clouds":27,
"rain":0.47
}
]
}

最佳答案

您需要将 Dictionary 转换为 WeerItem 对象。由于您已经实现了自定义初始化程序,因此您可以直接调用它。

for weerData in json {
self.weerItems.append(WeerItem(dictionary:weerData))
}

如果您使用的是 Swift 4,您应该使 WeerItem 符合 Decodable,然后您就不需要自定义初始化器了。

关于json - 无法将我的 JSON 附加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47909104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com