我有一个对API执行GET请求的方法:
public func getApiData(completion: @escaping () -> (), fullUrl: String)
{
let session = URLSession.shared
let url = URL(string: fullUrl)!
let task = session.dataTask(with: url) { (data, _, _) -> Void in
if let data = data {
self.serializeToJSON(jsonData: data)
completion()
}
}
task.resume()
}
使用SwiftyJSON然后我将数据转换为JSON:
private func serializeToJSON(jsonData: Data) {
self.json = JSON(data: jsonData)
print(self.json)
for (index,item) in self.json {
print("hi")
}
}
打印完整的JSON:
[{"TenantID":1,"Tenant1":"RAC"},{"TenantID":2,"Tenant1":"VictorMillwell"},{"TenantID":3,"Tenant1":"Comfort"},{"TenantID":4,"Tenant1":"Greenlight"}]
然而,由于print("hi")
没有被执行,JSON无法迭代,我不知道为什么,我已经在互联网上到处查看了解为什么它没有迭代,我似乎无法理解为什么。
有谁知道为什么?
答案 0 :(得分:1)
有一个很好的教程here,但在manual它说你可以像这样循环:
// If json is .Dictionary
for (key,subJson):(String, JSON) in self.json {
// Do something you want
}
// If json is .Array
// The `index` is 0..<json.count's string value
for (index,subJson):(String, JSON) in self.json {
// Do something you want
}
如果你不知道它是字典还是数组,也许你可以这样做:
switch self.json.type {
case .array:
for (index,subJson):(String, JSON) in self.json {
// Do something you want
}
case .dictionary:
for (key,subJson):(String, JSON) in self.json {
// Do something you want
}
default:
// Do some error handling
}
答案 1 :(得分:0)
目前尚不清楚为什么要枚举JSON。在Swift 4中解码这个JSON是微不足道的:
struct Tenant:Decodable { let TenantID:Int; let Tenant1:String }
let arr = try! JSONDecoder().decode([Tenant].self, from: data)
现在arr
是租户的Swift数组,其中每个租户都有TenantID
属性和Tenant1
属性。现在,您可以使用该阵列做任何您喜欢的事情,包括如果您愿意,可以骑自行车。